c++ - 如何调用模板化类型

标签 c++ templates c++11

我正在尝试创建一个模板函数,它有两个基于模板参数的不同实现。第一个是针对 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/

相关文章:

指向 Eigen::Map<Eigen::VectorXd> 对象的 C++ 特征指针

c++ - 矩阵的行、列和对角线之和

c++ - 可以更改模板参数吗?

html - 更改 Sphinx 的目录模板

c++ - 函数模板的非依赖默认模板参数是否允许 SFINAE?

c++ - `auto* p = &n` 和 `auto p = &n` 之间有什么区别吗?

c++ - 元组作为函数参数中的默认值

c++ - 迭代 `std::multiset` 的唯一元素

c++ - 如何使用 Boost.Python 从 C++ 对象创建 Python 对象

C++ 创建类对象