联合成员中的模板 - 声明不声明任何内容
Template in union member - Declaration does not declare anything
我需要创建一个 "node" class 来存储它的内容(T
类型)或 nullptr
(代表一个空节点) .
此节点在存储内容和不存储任何内容时都必须具有元数据(例如其年龄)。
我想出了这个(简化的)代码:
template <typename T>
struct Node
{
union T_or_null {
T;
std::nullptr_t;
};
int age;
T_or_null content;
Node(T_or_null argContent)
: age(0),
content(argContent)
{
}
};
int main()
{
Node<int> a(0);
Node<int> b(nullptr);
return 0;
}
我遇到错误 main.cpp:5:3: error: declaration does not declare anything [-fpermissive]
Gcc 似乎明白我正在尝试创建任何东西和 nullptr_t
的联合(这是任何东西的一部分),但它应该是 int
和 [=14= 的联合] 在这种情况下,仅此而已。
我是不是误解了模板的工作原理,还是我需要做一些不同的事情?
工会成员也需要一个名字:
union T_or_null {
T value;
std::nullptr_t null;
};
但它们也需要手动簿记才能正确处理,所以我建议您放弃联合并切换到 std::optional
来模拟可空性:
template <typename T>
struct Node
{
int age;
std::optional<T> content;
Node(std::optional<T> argContent)
: age(0),
content(argContent)
{
}
};
我需要创建一个 "node" class 来存储它的内容(T
类型)或 nullptr
(代表一个空节点) .
此节点在存储内容和不存储任何内容时都必须具有元数据(例如其年龄)。
我想出了这个(简化的)代码:
template <typename T>
struct Node
{
union T_or_null {
T;
std::nullptr_t;
};
int age;
T_or_null content;
Node(T_or_null argContent)
: age(0),
content(argContent)
{
}
};
int main()
{
Node<int> a(0);
Node<int> b(nullptr);
return 0;
}
我遇到错误 main.cpp:5:3: error: declaration does not declare anything [-fpermissive]
Gcc 似乎明白我正在尝试创建任何东西和 nullptr_t
的联合(这是任何东西的一部分),但它应该是 int
和 [=14= 的联合] 在这种情况下,仅此而已。
我是不是误解了模板的工作原理,还是我需要做一些不同的事情?
工会成员也需要一个名字:
union T_or_null {
T value;
std::nullptr_t null;
};
但它们也需要手动簿记才能正确处理,所以我建议您放弃联合并切换到 std::optional
来模拟可空性:
template <typename T>
struct Node
{
int age;
std::optional<T> content;
Node(std::optional<T> argContent)
: age(0),
content(argContent)
{
}
};