Описание тега 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 <cstdint> #include <variant> 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&& t)спецификация noexcept не зависит от спецификации noexcept деструктора внутренних типов? Я могу видеть на Cppreference, что template <class T> variant& operator=(T&& t) …
08 окт '18 в 15:46
3
ответа
Как вернуть определенный тип из варианта с помощью посетителя?
У меня есть код ниже и почему visitor1 а также visitor2 дает ошибки? Означает ли это, что посетитель не может вернуть один тип в варианте? #include <iostream> #include <variant> struct Visitor1 { template <class T> T operator()(con…
05 ноя '18 в 17:54
1
ответ
Как упростить типы классов std:: option
Я уверен, что есть простой способ сделать это, но не смог найти ничего в SO. Не могу найти много информации в en.cppreference.com либо. Есть ли способ упростить std::variant</*class types*/> так что мы можем объявить функции и классы, которые …
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<bool, int, double, std::string, std::vector<ScriptParameter> >; Я получаю переопределение Scrip…
27 ноя '18 в 15:18
1
ответ
Как использовать std::visit с std:: вариантом, содержащим enum
Я пытаюсь использовать std:: варианту с перечислением как часть возможных типов. У меня ошибка компиляции, и я не могу найти причину. Если я использую любой другой тип вместо enum, код работает. Вот часть моего кода: #include <variant> #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 < class ... Types > struct type_list {}; using valid_t…
25 янв '19 в 18:20
0
ответов
Печать сетки данных из вектора структуры
Я создал код, который представляет таблицу данных. Я хотел бы сделать его более универсальным. Мой код: #include <algorithm> #include <iomanip> #include <iostream> #include <numeric> #include <string> #include <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& b ) { return b; }, v ); Это компилируется, но выдает предупреждение C4172: возвращение адреса лок…
20 дек '18 в 17:54
1
ответ
Что я должен использовать вместо void как один из альтернативных типов в варианте?
Я хочу иметь вариант, который может содержать тип Foo, (непересекающийся) тип Bar или ничего. Ну, естественно, я думал об использовании std::variant<Foo, Bar, void> - но это не похоже на работу. То есть вы можете определить этот тип, но если в…
02 ноя '18 в 22:24
2
ответа
C++2017 Ссылка на std::vector<std:: option>
Я пытаюсь сохранить ссылку на std::vector состоящий из std::variant, Я могу создать const std::variant<T>& к элементу vectorНо я изо всех сил стараюсь сохранить ссылку на весь вектор. Я предполагаю, что ответ связан с этим сообщением, вари…
02 янв '19 в 16:52
1
ответ
Невозможно получить адрес элемента в списке по варианту
Я пытался зациклить список и получить адрес элемента. Но все адреса элементов одинаковы при использовании варианта класса. int main() { std::list<std::variant<std::list<int>, std::list<std::string>>> list_of_lists; std::list&…
02 июн '19 в 01:44
0
ответов
std::variable не работает, если один из параметров его типа имеет тип массива
Работая с std:: Вариант, я обнаружил, что он не очень хорошо работает с типами массивов. Следующий пример не компилируется с новейшими компиляторами Gcc и Clang в проводнике компилятора. #include <iostream> #include <variant> int main() …
22 май '19 в 10:39