我正在尝试创建一个模板函数,它有两个基于模板参数的不同实现。第一个是针对 I/O 操纵器的,第二个是针对任何一般情况的。
template <typename T>
typename std::enable_if<
std::is_same<decltype(std::setw), T>::value>::type
foo(T& t){
cout << "enabled" << std::endl;
}
template <typename T>
void foo(T& t){
cout << "Normal" << std::endl;
}
template <typename... Ts>
void foohelper(Ts... t){
foo(t...);
}
int main(){
foohelper(std::setprecision(3)); // It should print enabled, but printing Normal
}
目前它没有做我想要实现的事情。我该如何解决?
最佳答案
您不需要使用 enable_if
- 只需在 template foo
的主要定义下方专门化模板即可。
template <>
void foo<decltype(std::setw(0))>(decltype(std::setw(0))& t)
{
cout << "enabled" << std::endl;
}
关于c++ - 如何调用模板化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177682/