对于POD甚至std :: string boost变量适用于我,但是当我尝试我的用户类型A时,它对此代码失败:
#include "stdafx.h"
#include <boost/variant/variant.hpp>
#include <boost/variant/get.hpp>
struct A
{
char ch;
};
int main()
{
boost::variant< int, A > n, a;
n = 33;
a = 'a';
try
{
int nn = boost::get< int >( n ); // ok
auto aa = boost::get< A >( a ); // throws bad_get
}
catch( boost::bad_get& )
{
bool okay = false;
}
return 0;
}
为什么?
答案 0 :(得分:2)
您的第二个示例实际上包含另一个int
,因为char
可以转换为int
。要从A
构造char
,您可以执行a = A{'a'};
,它将调用您的类型的默认构造函数之一(可能是聚合初始化?我不确切知道)然后初始化你的variant
A
。