0

我已经创建了结构

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.
    //
4

2 回答 2

1

对的,这是可能的。文档 ( http://www.boost.org/doc/libs/1_53_0/doc/html/variant/tutorial.html ) 中的示例之一是:

boost::variant< int, std::string > v;

它指出:

默认情况下,变体默认构造其第一个有界类型,因此 v 最初包含 int(0)。如果不希望这样做,或者如果第一个有界类型不是默认可构造的,则可以直接从任何可转换为其有界类型之一的值构造变体”

于 2013-04-12T02:24:19.597 回答
1

以下为我编译(VS2012):

#include "boost/variant.hpp"

struct Event
{
  int key;
  boost::variant<int, float> value;
};

int main()
{
   Event e;
   return 0;
}

所以,是的,可以在没有new. 如果您需要进一步的帮助,我建议显示演示问题的完整代码以及编译器错误消息。

于 2013-04-12T02:24:51.047 回答