我有一段代码看起来像
class Something {};
using MyUnionType = std::variant<A, B>;
using A = Something;
using B = std::vector<MyUnionType>;
但这不编译,我明白了
error: use of undeclared identifier 'A'
在 MyUnionType 的声明中
和
error: use of undeclared identifier 'MyUnionType'
在B.的声明中
有没有办法声明这些类型(别名),或者 C++ 不够先进,无法做到这一点?
我尝试如下转发声明 A 和 B
class Something {};
class A;
class B;
using MyUnionType = std::variant<A, B>;
using A = Something;
using B = std::vector<MyUnionType>;
但这也不编译。
error: typedef redefinition with different types ('Something' vs 'A')
error: typedef redefinition with different types ('std::vector<MyUnionType>' (aka 'vector<variant<A, B>>') vs 'B')
当我尝试将 MyUnionType 的声明移动到底部并改为转发声明 MyUnionType 时,我得到了类似的错误。
如果你想引用类本身,你必须定义一个新类型。
#include <variant>
#include <vector>
struct Something {};
struct MyUnionType;
using A = Something;
using B = std::vector<MyUnionType>;
struct MyUnionType {
std::variant<A, B> v;
};