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 – мощная библиотека для работы с типами, можно настроить под нужное поведение.
→ Ссылка