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

The class template std::variant represents a type-safe union. An instance of std::variant at any given time either holds a value of one of its alternative types, or in the case of error - no value
1 ответ

Как сравнить std:: вариант пользовательских классов?

1. Это мои занятия: struct SymbolToken { std::string name; }; struct QuoteToken { }; struct ConstantToken { int value; }; 2. У меня есть следующий typedef: typedef std::variant<SymbolToken, QuoteToken, ConstantToken> Token; 3. Я хочу написать …
02 ноя '18 в 02:04
1 ответ

StateMachine с std:: вариантом, получая право вычета пользовательского шаблона

С помощью следующего кода, как правильно написать вывод шаблона? template<class R, class State, class... Ts> struct visitor : Ts... { using Ts::operator()...; }; template<class R, class State, class... Ts> visitor(State, Ts...)->visit…
24 ноя '18 в 20:58
1 ответ

Почему sizeof( std::variable<char>) == 8 при использовании libC++, а не 2 (как в MSVC STL и libstdC++)?

Рассмотрим этот пример в проводнике компилятора. В основном, у нас есть этот фрагмент кода: #include &lt;cstdint&gt; #include &lt;variant&gt; enum class Enum1 : std::uint8_t { A, B }; enum class Enum2 : std::uint8_t { C, D }; using Var = std::varian…
08 дек '18 в 19:38
1 ответ

Почему спецификация noexcept `operator=(T&& t)` `std: variable` не зависит от спецификации noexcept деструктора внутренних типов?

Длинное название: почему std:variant"s operator=(T&amp;&amp; t)спецификация noexcept не зависит от спецификации noexcept деструктора внутренних типов? Я могу видеть на Cppreference, что template &lt;class T&gt; variant&amp; operator=(T&amp;&amp; t) …
08 окт '18 в 15:46
3 ответа

Как вернуть определенный тип из варианта с помощью посетителя?

У меня есть код ниже и почему visitor1 а также visitor2 дает ошибки? Означает ли это, что посетитель не может вернуть один тип в варианте? #include &lt;iostream&gt; #include &lt;variant&gt; struct Visitor1 { template &lt;class T&gt; T operator()(con…
1 ответ

Как упростить типы классов std:: option

Я уверен, что есть простой способ сделать это, но не смог найти ничего в SO. Не могу найти много информации в en.cppreference.com либо. Есть ли способ упростить std::variant&lt;/*class types*/&gt; так что мы можем объявить функции и классы, которые …
08 окт '18 в 19:17
1 ответ

Использование std::variable<T, std:: function <T () >> в качестве гибкого ввода вместо подклассов

У меня есть класс, который принимает входные данные, и иногда я хотел бы установить этот вход, назначая переменную, а в других случаях я хотел бы, чтобы класс вызывал функцию, чтобы получить свой ввод. В прошлом я бы просто использовал std::function…
02 сен '18 в 21:39
3 ответа

В C++, как сделать вариант, который может содержать вектор того же варианта?

Я пытаюсь сделать Std:: вариант, который может содержать вектор того же варианта: class ScriptParameter; using ScriptParameter = std::variant&lt;bool, int, double, std::string, std::vector&lt;ScriptParameter&gt; &gt;; Я получаю переопределение Scrip…
27 ноя '18 в 15:18
1 ответ

Как использовать std::visit с std:: вариантом, содержащим enum

Я пытаюсь использовать std:: варианту с перечислением как часть возможных типов. У меня ошибка компиляции, и я не могу найти причину. Если я использую любой другой тип вместо enum, код работает. Вот часть моего кода: #include &lt;variant&gt; #includ…
10 янв '19 в 01:49
1 ответ

Как сделать так, чтобы ключ карты был двух разных типов данных?

У меня есть std::unordered_map контейнер, где Key может быть двух типов данных: 64-битное без знака int кортеж, имеющий (8-битный без знака int, 8-битный без знака int, 16-битный unsigned-int, 32-битный unsigned int) Но значение - это тип объекта, к…
11 окт '18 в 22:14
2 ответа

Получить текущий typeid типа std::variable (например, boost::variable type())

Я перешел с boost:: многоадресного варианта на стандартный: и попал в ловушку. Я использовал симпатичную функцию в boost 'type()', которая позволяет вам получить текущий typeid. См. https://www.boost.org/doc/libs/1_48_0/doc/html/boost/variant.html К…
09 дек '18 в 21:11
2 ответа

Boost:: Polycollection, STD:: вариант или CRTP?

Предположим, что "стандартная" парадигма наследования C++: struct GeneralFunc { /*..members..*/ virtual double value(double a, double b) { return 0; } }; struct Func_classA : GeneralFunc { /*..members..*/ double value(double a, double b) { return a …
27 сен '18 в 06:07
5 ответов

Список предопределенных типов, передаваемый в std:: option

Есть ли способ создать предопределенный список типов и использовать эти типы в std::variable в C++ 17? Вот что я пытаюсь сделать, он компилируется, но не работает, как я надеялся: template &lt; class ... Types &gt; struct type_list {}; using valid_t…
25 янв '19 в 18:20
0 ответов

Печать сетки данных из вектора структуры

Я создал код, который представляет таблицу данных. Я хотел бы сделать его более универсальным. Мой код: #include &lt;algorithm&gt; #include &lt;iomanip&gt; #include &lt;iostream&gt; #include &lt;numeric&gt; #include &lt;string&gt; #include &lt;vecto…
08 окт '18 в 12:12
1 ответ

Как выглядит структура памяти std::vector std:: option?

У меня есть std::vector из std::variant типы размещены в стеке. Поскольку размер каждого варианта является переменным. Мне интересно, какова структура памяти вектора в стеке.
27 сен '18 в 15:20
1 ответ

Как получить ссылку на значение варианта?

Я имею std::variant где все классы являются производными от одной и той же базы. Я хочу привести вариант к базе. return std::visit( []( const Base&amp; b ) { return b; }, v ); Это компилируется, но выдает предупреждение C4172: возвращение адреса лок…
20 дек '18 в 17:54
1 ответ

Что я должен использовать вместо void как один из альтернативных типов в варианте?

Я хочу иметь вариант, который может содержать тип Foo, (непересекающийся) тип Bar или ничего. Ну, естественно, я думал об использовании std::variant&lt;Foo, Bar, void&gt; - но это не похоже на работу. То есть вы можете определить этот тип, но если в…
02 ноя '18 в 22:24
2 ответа

C++2017 Ссылка на std::vector<std:: option>

Я пытаюсь сохранить ссылку на std::vector состоящий из std::variant, Я могу создать const std::variant&lt;T&gt;&amp; к элементу vectorНо я изо всех сил стараюсь сохранить ссылку на весь вектор. Я предполагаю, что ответ связан с этим сообщением, вари…
02 янв '19 в 16:52
1 ответ

Невозможно получить адрес элемента в списке по варианту

Я пытался зациклить список и получить адрес элемента. Но все адреса элементов одинаковы при использовании варианта класса. int main() { std::list&lt;std::variant&lt;std::list&lt;int&gt;, std::list&lt;std::string&gt;&gt;&gt; list_of_lists; std::list&…
02 июн '19 в 01:44
0 ответов

std::variable не работает, если один из параметров его типа имеет тип массива

Работая с std:: Вариант, я обнаружил, что он не очень хорошо работает с типами массивов. Следующий пример не компилируется с новейшими компиляторами Gcc и Clang в проводнике компилятора. #include &lt;iostream&gt; #include &lt;variant&gt; int main() …
22 май '19 в 10:39