если вам действительно нужен полиморфный тип, возможно, вы могли бы взглянуть на класс boost :: option или что-то подобное;
Это разработано для имитации некоторых поведений динамических языков в C ++ и обычно используется для взаимодействия (или реализации) с ними.
Вы можете создать "vector a" и a.push_back (Variant ((unsigned int) ..)). Конструкторам для выдаваемых значений требуется тип времени компиляции.
Можно также создать векторизованный вариантный класс, который будет хранить информацию о типе для всей коллекции, если вы ожидаете, что значения будут однородными.
но гораздо более вероятно, что вы можете достичь желаемого конечного результата без такого механизма, возможно, переделав вашу программу, чтобы избежать проверок типов во время выполнения (что, скорее всего, сведет на нет некоторые преимущества использования C ++ по сравнению с другим языком в первую очередь). ).
Вы можете написать зависимые от типа детали в виде шаблонов (как предложено выше) и выбрать альтернативный путь к коду на основе настроек файла конфигурации, проверенных и отправленных один раз. Этот стиль кодирования становится немного проще в c ++ 0x с помощью 'auto' и decltype ().
Особый случай значений со знаком и со знаком включает в себя предоставление еще одного бита, который звучит необычно, или незначительного преимущества по сравнению с добавленной сложностью, но я легко могу представить себе тот, кто хочет реализовать реализацию, которая может переключаться между плавающей запятой одинарной и двойной точности, например .
Еще одним простым вариантом будет установка времени компиляции для типа (например, введенного как определение из настроек сборки или make-файла), а затем распространение нескольких версий вашей программы, что может иметь смысл в некоторых обстоятельствах. Тем не менее, уже предложенные шаблоны, скорее всего, будут наиболее полезными.