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"?或者,我是否需要获得预处理器指令的帮助?这可能是一个重复的问题,但我找不到它的答案.任何建议将不胜感激.
这是使用函数模板将参数"重新设置"为零的方法:
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)