c ++创建动态类型

时间:2016-10-13 21:36:13

标签: c++ types type-conversion custom-data-type

我有以下情况:根据我的函数所采用的某些参数,它必须创建不同的类型:

我想做这样的事情:

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。

如何做到这一点?无论是以这种方式还是其他方式。

感谢。

2 个答案:

答案 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>();
}

请注意,运行时值不会影响编译时决策。没有时间旅行装置。