Код: Выделить всё
unique_tupleКод: Выделить всё
void proc1(int arg);
void proc2(MyClass arg);
void proc3(double arg);
void proc4(int arg);
void proc4(MyClass arg);
...
unique_tuple my_tuple; // OK
unique_tuple my_tuple2; // Compilation error: int and double can be cast to each other.
my_tuple = 42; // OK
my_tuple = 3.14; // OK my_tuple.as == 3
my_tuple = MyClass{}; // OK
proc1(my_tuple); // OK
proc2(my_tuple); // OK
proc3(my_tuple); // OK
proc4(my_tuple); // Error. Call is ambiguous
Дополнительное, но необязательное требование - это то, что уникальное такого, что уникальное_т, int, int, int, int, int, int, int, int, int,>: уникальный_tuple . Это может быть простым, используя , которая выбирает определенную реализацию контейнера, используя некоторый алгоритм упорядочения параметров шаблона. Конкретная реализация некоторого упорядочения может быть даже в зависимости от компилятора. Меня не интересует конкретное представление данных в памяти и сериализации (пока). < /P>
Я уверен, что кто -то уже сделал это на более профессиональном уровне, чем я могу себе позволить. Тем не менее, я не мог найти готовые решения. Самое близкое значение, которое я нашел, это Boost :: MPL . Да, эта библиотека решает часть моих проблем при обработке пакета параметров шаблонов на стадии компиляции, но я не нашел реализацию самого кортежа. Возможно, я не полностью понял концепцию Boost :: MPL, и моя проблема решена с его помощью.
Вопрос: есть ли идиомы C ++, которые обеспечивают кортеж/контейнер с уникальными/неконвертируемыми типами? Я был бы признателен за любые примеры или ссылки на репозитории с открытым исходным кодом с аналогичной функцией. И различные алгоритмы для работы с этим графиком знают только об их типах. Или для моделирования физических процессов, мне нужны объекты, чтобы иметь различные характеристики, как будто они были чем-то другим одновременно, в зависимости от контекста. На самом деле < /p>
Код: Выделить всё
int j;
std::string s;
s = j;
s = 1;
< /code>
является юридической записью. Итак, код < /p>
unique_tuple my_tuple;
my_tuple = 42;
Подробнее здесь: https://stackoverflow.com/questions/797 ... ible-types
Мобильная версия