c ++ создает динамический тип

У меня следующая ситуация: в зависимости от какого-то параметра, который принимает моя функция, он должен создавать разные типы:

Я хочу сделать что-то вроде этого:

if(variant==1){
#define my_type int;
}
else{
#define my_type double;
}
cout<<sizeof(my_type);

и затем используйте my_type в моем следующем коде.

Итак, что в случае варианта = 1 sizeof(my_type) дает 4 и для варианта = 2 это дает 8.

Как это может быть сделано? Либо так или иначе.

Благодарю.

0

Решение

Я согласен с @Magnus Hoff в том, что то, что вы просили, не может быть сделано. Но есть два приближения.

Вариант 1: сделать вариант макросом.

#ifdef variant
#  define my_type int
#else
#  define my_type double
#endif

Вариант 2: использовать функцию шаблона.

Вместо

void func(int variant) {
if (variant==1)
#define my_type int
else
#define my_type double
my_type ...
}

сделай это:

template<typename my_type> void func() {
my_type ...
}
0

Другие решения

Заменить это:

if(variant==1){
#define my_type int;
}
else{
#define my_type double;
}
cout<<sizeof(my_type);

… с этим:

template< class Type >
void foo()
{
// ...
cout<<sizeof(Type);
}

// ...
if( variant==1 )
{
foo<int>();
}
else
{
foo<double>();
}

Обратите внимание, что значение времени выполнения не может влиять на решения времени компиляции. Без устройства для путешествий во времени.

0

По вопросам рекламы [email protected]