【发布时间】:2022-01-17 08:16:14
【问题描述】:
所以我在std::variant 中使用类的方式有问题。
假设我有以下代码:
// abc.h
#include <variant>
class A
{
public:
A(std::variant<B, C> data);
};
class B
{
public:
B(std::variant<A, C> data);
};
class C
{
public:
A(std::variant<A, B> data);
};
当我尝试使用尚未声明的类时,它会给我类似error C2065: 'NameOfClass': undeclared identifier 的错误。对此有什么好的解决方案?在我的实际项目中,variants 中有相当多的类相互使用。
【问题讨论】:
-
我很好奇为什么你想要
std::variant构造函数参数而不是仅仅重载构造函数?但无论如何,您只需要为B和C添加一些前向声明。 -
@Brian
std::variant会处理不完整的类型吗? -
@FrançoisAndrieux 嗯,好点。我不知道。估计不会
-
@FrançoisAndrieux 我认为不会。只有明确声明它们可以处理不完整类型的标准库模板才能这样做。
-
@Brian 所以在我的实际项目中,一些类的构造函数包含两个变体类型参数,每个变体由大约 5 - 10 个类型组成,所以我想我不想写这么多的构造函数。我会看看前向声明。