2016-10-13 5 views
0

У меня следующая ситуация: В зависимости от того или иного параметра, что моя функция принимает это должно создавать различные типы: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.

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

Спасибо.

+1

Способ, который вы предлагаете, не может работать, поскольку '# define' работает во время компиляции, но' if' работает во время выполнения. Трудно предположить, что вам следует делать, не зная больше о вашей проблеме. Можете ли вы рассказать нам более подробную картину того, чего вы пытаетесь достичь? –

+0

Это не так, как работают директивы препроцессора. –

ответ

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

Я обновил свой вопрос с соответствующим примером. Я думаю, что ни то, ни другое из них не подойдет мне. – mbaros

+0

Решение шаблона должно работать с обновленным вопросом. В теле функции вы можете использовать size_of (my_type). –

0

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

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

& hellip; с этим:

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

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

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

Смежные вопросы