我有以下情况:根据我的函数所采用的某些参数,它必须创建不同的类型:
我想做这样的事情:
if(variant==1){
#define my_type int;
}
else{
#define my_type double;
}
cout<<sizeof(my_type);
然后在我的进一步代码中使用my_type。
因此,如果variant = 1 sizeof(my_type)
给出4,而对于variant = 2则给出8。
如何做到这一点?无论是以这种方式还是其他方式。
感谢。
答案 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 ...
}
答案 1 :(得分: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>();
}
请注意,运行时值不会影响编译时决策。没有时间旅行装置。