我创建了结构
struct Event
{
int key;
boost::variant<int, float> value;
};
是否可以像这样创建事件:
Event e;
我试过这个,但是我遇到了编译错误。这是可能的还是我必须这样做:
Event e = new Event();
* 编辑:* 这是我得到的错误:错误C2061:语法错误:标识符'storage_'(在variant.hpp中)
在variant.hpp中有一些注释,但我不能理解它们,因为“第一个绑定类型是一个int ???
// NOTE TO USER : // Compile error from here indicates that the first bound // type is not default-constructible, and so variant cannot // support its own default-construction. //
答案 0 :(得分:1)
是的,有可能。 doc(http://www.boost.org/doc/libs/1_53_0/doc/html/variant/tutorial.html)中的一个示例是:
boost::variant< int, std::string > v;
它声明:
默认情况下,变量default-构造其第一个有界类型,因此v最初包含int(0)。如果不希望这样,或者第一个有界类型不是默认构造的,则可以直接从任何可转换为其有界类型之一的值构造变体“
答案 1 :(得分:1)
以下编译(VS2012):
#include "boost/variant.hpp"
struct Event
{
int key;
boost::variant<int, float> value;
};
int main()
{
Event e;
return 0;
}
所以,是的,可以在没有new
的情况下创建它。如果您需要进一步的帮助,我建议您显示演示该问题的完整代码以及编译器错误消息。