Целое число в шаблон коллекции типов в C ++ - PullRequest
0 голосов
/ 25 июня 2018

Есть ли какой-либо способ в C ++ создать изменяемую во время выполнения коллекцию, которая соответствует целому числу с шаблоном type?

Сначала я думаю о:

std::map<uint32_t, std::type_index> type;

, но std::type_index имеет оченьнебольшая полезность.Мне нужно иметь возможность приводить по этому типу и использовать его в качестве аргумента для std::is_convertible

Так что API должен быть в состоянии что-то вроде этого:

my_collection.add<1234, std::string>();
my_collection.get<1234>()::type // type is std::string

Или на самом деле что-нибудь еще близкодостаточно я могу использовать во время выполнения:)

1 Ответ

0 голосов
/ 25 июня 2018

Нет.

Если список поддерживаемых вами типов можно перечислить конечным и централизованным образом, можно использовать std::variant или boost::variant или список по вашему усмотрению.

Есливаш список операций над типом, который вы поддерживаете, может быть конечно и централизованно перечислен, std::any или boost::any вместе с методами стирания типа могут быть использованы для решения вашей проблемы. Вот чрезмерно общая система для стирания почти любой операции одной отправки .

Вы можете использовать std::any или boots::any, чтобы иметь нецентрально, но локально конечно перечислимый списоктипы, но только точные типы, известные в каждом месте перечисления, находятся в игре в этом месте.

Вы можете сделать комбинацию из вышеперечисленного.

В противном случае вы попадаете в мир времени выполнениякомпиляция динамических библиотек C ++ и передача результата и / или создание C ++ с исходным кодом.Выполнение компиляции на лету.

Все это будет зависеть от того, какова ваша точная, реальная проблема, для которой вы придумали это как «решение»;вероятно, это будет связанный вопрос, на который ваш ответ «да», и этот связанный вопрос, вероятно, вам действительно нужно решить.

Но ответ на поставленный вопрос просто «Нет»..

...