Я создал структуру
struct Event
{
int key;
boost::variant<int, float> value;
};
Можно ли создавать события так:
Event e;
Я пробовал это, но получаю ошибки компилятора. Это возможно, или я должен сделать:
Event e = new Event();
*РЕДАКТИРОВАТЬ: * Это ошибка, которую я получаю: ошибка C2061: синтаксическая ошибка: идентификатор ‘storage_’ (в варианте .hpp)
Здесь есть несколько комментариев в варианте .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. //
Следующие компиляции для меня (VS2012):
#include "boost/variant.hpp"
struct Event
{
int key;
boost::variant<int, float> value;
};
int main()
{
Event e;
return 0;
}
Так что, да, это возможно создать без new
, Если вам нужна дополнительная помощь, я бы предложил показать полный код, который демонстрирует проблему, а также сообщение об ошибке компилятора.
Да, это возможно. Один из примеров в документе (http://www.boost.org/doc/libs/1_53_0/doc/html/variant/tutorial.html) является:
boost::variant< int, std::string > v;
что говорится:
По умолчанию вариант default-конструирует свой первый ограниченный тип, поэтому v изначально содержит int (0). Если это нежелательно или если первый ограниченный тип не является конструируемым по умолчанию, вариант может быть создан непосредственно из любого значения, конвертируемого в один из его ограниченных типов ».