У меня следующая ситуация: в зависимости от какого-то параметра, который принимает моя функция, он должен создавать разные типы:
Я хочу сделать что-то вроде этого:
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.
Как это может быть сделано? Либо так или иначе.
Благодарю.
Я согласен с @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 ...
}
Заменить это:
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>();
}
Обратите внимание, что значение времени выполнения не может влиять на решения времени компиляции. Без устройства для путешествий во времени.