Описание тега boost-variant

Boost.Variant is a C++ library containing a safe, generic, stack-based discriminated union container, offering a simple solution for manipulating an object from a heterogeneous set of types in a uniform manner.
1 ответ

2-D вектор повышения:: вариант в C++

Я ищу для хранения информации из таблицы данных с несколькими строками и столбцами. Каждый столбец содержит различный тип (int, double, std::stringи т. д.), которые будут известны только во время выполнения. 2-й vector из boost::variant лучший спосо…
28 авг '14 в 18:31
1 ответ

Как вернуть значение шаблона из boost::apply_visitor?

Следующий код правильно выплевывает значения 999 а также "test"в консоль, но как мне вместо этого вернуть эти значения? Что-то вроде закомментированной строки было моей конечной целью; вернуть значение, которое я могу затем присвоить автоматической …
16 янв '15 в 05:25
1 ответ

Могу ли я назначить / создать std::variable<Ts...> для / из std::variable<Ts..., Ys...>?

Мне кажется, что назначение чего-то, что может быть яблоками или апельсинами, что-то, что может быть яблоками, апельсинами или клубникой, является четко определенным. Почему тогда я не могу этого сделать? #include &lt;variant&gt; int main() { std::v…
31 дек '18 в 09:45
1 ответ

Сравните два варианта с бустом static_visitor

Я начал использовать библиотеку наддува несколько дней назад, поэтому мой вопрос может быть тривиальным. Я хочу сравнить два варианта одного типа с static_visitor. Я попробовал следующее, но не хочу компилировать. struct compare:public boost::static…
03 ноя '12 в 22:07
1 ответ

Как обойти соответствующие возвращаемые типы Boost Variant?

Связанный вопрос Предположим, у нас есть: boost::variant&lt;nil, std::string, string_struct&gt; А также, struct string_struct { string_struct(std::string const&amp; name = "") : name(name) {} std::string name; } Есть ли какой-нибудь способ предотвр…
11 дек '15 в 17:41
1 ответ

Древовидные контейнеры Boost:: Вариант - есть ли недостатки?

Видимо можно заказать карты и наборы boost::variant, как это: typedef boost::variant&lt;std::string, int, bool&gt; key_type; std::map&lt;key_type, size_t&gt; m; m.insert(std::make_pair(std::string("a"), 3)); m.insert(std::make_pair(1, 7)); auto x = …
19 фев '17 в 10:56
1 ответ

Простой способ моделировать JSon в C++

Мне нужно смоделировать JSon в C++. Сначала я подумал о: boost::property_tree Но, к сожалению - это не заботится о типах JSon. Целые числа представлены в виде строк - и это не вариант. Вторая идея будет: boost::variant with recursive_wrapper Что выг…
01 окт '15 в 07:32
1 ответ

boost:: вариант с недвижимыми типами

У меня есть тип T что не поддерживает движение: struct T { T(); T(T const&amp;) = delete; T&amp; operator=(T const&amp;) = delete; T(T&amp;&amp;) = delete; T&amp; operator=(T&amp;&amp;) = delete; }; Как мне создать объект типа boost::variant&lt;T&gt…
02 апр '16 в 14:50
2 ответа

Как изменить поведение оператора boost:: option <

Boost:: Вариант определяет оператор <следующим образом: Если which() == rhs.which(), то: content_this Это не то, что я хочу, потому что я хотел бы провалить некоторые <сравнения. Например, если у меня есть такой вариант: typedef boost::variant&lt;in…
06 фев '15 в 17:54
1 ответ

Как проверить, является ли тип шаблона одним из типов типа варианта?

Учитывая тип варианта и функцию шаблона, как я могу проверить, является ли тип шаблона одним из типов варианта? Есть ли более элегантный способ, чем следующий? typedef boost::variant&lt;Foo,Bar&gt; Var; template &lt;typename T&gt; void f(const T&amp…
31 май '16 в 07:02
2 ответа

Взаимно рекурсивный вариантный тип C++ (снова)

У меня есть проблема, аналогичная описанной здесь: C++ Взаимно рекурсивный вариантный тип Я пытаюсь создать представление JSON в C++. Многие библиотеки уже предлагают отличные JSON-представления и парсеры, которые очень быстрые, но я не изобретаю эт…
21 авг '17 в 18:42
1 ответ

Перепишите тип, чтобы использовать boost::recursive_wrapper вместо boost::make_recursive.

У меня есть этот тип using expression = boost::make_recursive_variant&lt; number, std::tuple&lt; boost::recursive_variant_, binary_operator, boost::recursive_variant_ &gt; &gt;; Неважно, что это двоичный_оператор, этот тип не работает правильно из-з…
18 окт '14 в 02:33
0 ответов

Clang-tidy ложноположительный с наддувом:: вариант

При выполнении clang-tidy на этом минимальном примере, опубликованном ниже, я получаю (imho) ложную положительную ошибку от clang-tidy (полная трассировка ошибок в конце) Value assigned to field 'id' in implicit constructor is garbage or undefined […
22 май '18 в 12:06
3 ответа

Как передать экземпляры `boost::static_visitor` в функции

Я использую boost::variant довольно часто в моих проектах. Теперь моим коллегам пришла в голову идея раздавать случаи boost::static_visitor&lt;int&gt; для того, чтобы настроить тип посещения. У нее был какой-то код, подобный следующему: #include &lt…
28 апр '17 в 09:20
3 ответа

Как получить текущий вариантный тип и определить новые переменные этого типа

У меня есть импульс:: вариант таких типов, как: typedef boost::variant&lt; uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, float, double, std::string &gt; StorageTt; StorageTt переменная, скажем val, установлен в один из этих типов хранения п…
18 сен '14 в 14:07
4 ответа

Вызов функции на boost:: option независимо от типа?

У меня есть класс, который имеет шаблон: template&lt;class T = int&gt; class slider; Класс имеет void Process(void) метод, так что, я думаю, он должен вызываться независимо от типа, возвращаемое значение равно void и в нем нет параметров. На данный …
17 май '13 в 01:29
1 ответ

Использование варианта Boost с разными типами shared_ptr<T>

Я хочу использовать Boost:: Вариант для эффективного объединения нескольких различных типов следующим образом. using VariantType = boost::variant&lt; std::shared_ptr&lt;StructA&gt;, std::shared_ptr&lt;StructB&gt; &gt;; Я собрал прототип на Coliru, г…
22 авг '16 в 20:01
1 ответ

ADL не может найти оператор потока с соответствующими квалификаторами для определенного пользователем типа

Я собираю службу x64 в Microsoft Windows 7 с Visual Studio 2010, используя вариант Boost, что-то вроде: namespace my_ns { typedef struct {} empty_t; typedef std::pair&lt;size_t, std::shared_ptr&lt;char&gt;&gt; string_t; typedef boost::variant&lt;emp…
14 май '12 в 20:55
1 ответ

Определить тип варианта

Я путаю следующую проблему, идентифицируя определенный тип в boost::variant и передать его как аргумент функции-члена в объекте класса. Рассмотрим следующий код typedef boost::variant&lt;int, string, double&gt; Variant; class test{ void func1 (Varia…
27 ноя '12 в 17:30
1 ответ

Повысьте::Variant; Определение класса посетителя

В Java я могу определить переменную универсального класса без указания типа. class Tree&lt;T extends Comparable&lt;? super T&gt;&gt; {} somewhere-else: Tree tree; Затем я могу прочитать какой-нибудь объект из файла и привести его к желаемому типу кл…
27 мар '13 в 13:44