【发布时间】:2021-03-09 05:13:11
【问题描述】:
This我的问题很好地解决了这个问题。
但是,看起来我需要为该结构创建一个构造函数,因为以下代码:
std::vector<Foo> row;
row.push_back( Foo( 1, 1 ) );
出错了。
当我尝试添加构造函数时
Foo(int mytype, int myvalue)
{
type = mytype;
value.intvalue = myvalue;
}
说错了
attempting to reference a deleted function
我需要定义所有 3 个构造函数吗?
还是有别的?
TIA!!
【问题讨论】:
-
在This 问题中,您没有接受任何答案。但是,answer with most votes 建议使用std::variant。这将使您对这些丑陋的
union的所有摆弄都过时了...union是 C 的继承,并且不能很好地与 C++ 中的类一起使用。那么,为什么会有这么多麻烦呢? -
@Scheff,std::variant 是 C++17。我还在使用 C++11。
-
好的。我忽略了 [c++11] - 我的错。但是,即使这是一个后续问题,也请提供minimal reproducible example。您的
union可能缺少一些重要的东西,我看不到什么(没有代码)。 -
boost(和其他 C++11 兼容库)具有变体类型。