C++识别模板参数

mus*_*fir -1 c++ templates arguments c-preprocessor

我想知道有没有办法识别模板参数?例如,假设我想基于模板参数初始化变量.原型示例如下

template<class T> 
      void initialise(T a)
      {
        if(T==int)a=0;
        else if(T=double)a=0.0;
        else if(T=complex<double>)a=T(0.,0);
        else print("unknown type"); 
      }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何识别模板参数"T"?或者,我是否需要获得预处理器指令的帮助?这可能是一个重复的问题,但我找不到它的答案.任何建议将不胜感激.

jua*_*nza 5

这是使用函数模板将参数"重新设置"为零的方法:

template<class T> 
void initialise(T& a)
{
  a = T(); // or T{};
}
Run Code Online (Sandbox Code Playgroud)

如果要将其限制为算术类型,可以使用SFINAE和std::is_arithmetic(浮点和整数类型),以及专门化std::complex.

template<class T> 
typename enable_if<std::is_arithmetic<T>::value, void >::type
void initialise(T& a)
{
  a = T();
}

template<class T>
void initialise(std::complex<T>& a)
{
  a = T();
}
Run Code Online (Sandbox Code Playgroud)