unordered tuple. Неупорядоченный кортеж
Знаете ли какую-нибудь библиотеку для плюсов, которая реализует шаблон неупорядоченного кортежа. Ну или что-то близкое. Работать это должно примерно так:
Объявнение и инициализация:
unordered_tuple<int, std::string, TMyClass> ut1(0, "hello", {});
unordered_tuple ut2(std::string("Hello"), TMyClass(), 42); // -> unordered_tuple<string, TMyClass, int>
Естественно, дублирование типов не допускается.
unordered_tuple<int, std::string, std::string> ut; // compile error!!!
Желательное поведение: Порядок шаблонных параметров не влияет на видимое поведение
assert(ut1 == ut2); // Ok
unordered_tuple<int, std::string, TMyClass> ut3(TMyClass(), std::string("text"), 16); // Ok
Использование: Объект приводится к/из любого типа из шаблонных параметров
ut1 = 42;
ut1 = "Hello";
int i = ut1; // i = 42
возможно:
int i = ut1.get<int>(); // i = 42
Ответы (1 шт):
Автор решения: Василий Волгин
→ Ссылка
В стандартной библиотеке C++ такого нет, но можно сделать самому.
Варианты решений:
- Свой класс – реализовать шаблон, который хранит элементы уникальных типов и позволяет получать их по типу.
- std::variant – не совсем то, но если нужно хранить одно значение из нескольких типов, подойдет.
- Boost.Fusion – мощная библиотека для работы с типами, можно настроить под нужное поведение.