Возможно ли иметь boost :: variable внутри структуры, которая не получает «new» ed?

Я создал структуру

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

0

Решение

Следующие компиляции для меня (VS2012):

#include "boost/variant.hpp"
struct Event
{
int key;
boost::variant<int, float> value;
};

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

Так что, да, это возможно создать без new, Если вам нужна дополнительная помощь, я бы предложил показать полный код, который демонстрирует проблему, а также сообщение об ошибке компилятора.

1

Другие решения

Да, это возможно. Один из примеров в документе (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

По вопросам рекламы [email protected]