是否可以根据c ++中的输入变量定义不同类型的变量?

use*_*419 1 c++ runtime

我正在开发一种算法,我需要根据输入变量将一个矢量定义为实数或复数.伪就像

void foo(bool is_real)
{
  if (is_real)
  {
    vector< double > v; 
  }
  else vector< complex > v;
}
Run Code Online (Sandbox Code Playgroud)

现在我正在编写两个不同版本的算法,如果is_real为true,我会将算法用于实例,否则,使用复杂的情况.实际上,除数据类型外,两种算法都完全相同.所以我谷歌和它

#if is_real
  vector< double > v;
#else
  vector< complex > v;
#endif
Run Code Online (Sandbox Code Playgroud)

但是这段代码没有编译.我正在使用linux gnu c ++ 4.7.2.我想知道宏是否仅适用于microsoft c ++?我觉得不舒服,因为在我的实现中唯一的区别将是数据类型,有没有办法选择在运行时应该使用什么类型?谢谢.

R. *_*des 10

如果代码完全相同,请将其设为模板:

namespace detail {
    template <typename T>
    void foo() {
        vector<T> v;
        // blah
    }
}

void foo(bool is_real)
{
  if (is_real)
  {
    detail::foo<double>();
  }
  else detail::foo<complex>();
}
Run Code Online (Sandbox Code Playgroud)