C++11 C++;-可变模板部分特化

C++11 C++;-可变模板部分特化,c++11,variadic-templates,specialization,C++11,Variadic Templates,Specialization,让我们看一个简单的片段: template<class T, class... Args> struct A { void operator()() { std::cout << "A"; } }; template<class T, class... Args> struct A<T, double, Args...> { void operator()() { std::cout << "B"; } }; tem

让我们看一个简单的片段:

template<class T, class... Args>
struct A {
    void operator()() { std::cout << "A"; }
};

template<class T, class... Args>
struct A<T, double, Args...> {
    void operator()() { std::cout << "B"; }
};

template<class T, class B, class... Args>
struct A<T, B, double, Args...> {
    void operator()() { std::cout << "C"; }
};

如您所建议的,如果第二个模板参数是“代码>双:

,则可以使用sFIFE不考虑<代码> C <代码>专业化。
template<typename, class T, class... Args>
struct A_impl {
    void operator()() { std::cout << "A"; }
};

template<class T, class... Args>
struct A_impl<void, T, double, Args...> {
    void operator()() { std::cout << "B"; }
};

template<class T, class B, class... Args>
struct A_impl<typename std::enable_if<!std::is_same<B,double>::value>::type,
         T, B, double, Args...> {
    void operator()() { std::cout << "C"; }
};

template<class T,class... Args>
using A = A_impl<void,T,Args...>;
模板
结构A_impl{
void运算符(){std::cout
使用A=A_impl;
template<class T, class... Args>
struct A<T, double, double, Args...> {
    void operator()() { std::cout << "D"; }
};
template<typename, class T, class... Args>
struct A_impl {
    void operator()() { std::cout << "A"; }
};

template<class T, class... Args>
struct A_impl<void, T, double, Args...> {
    void operator()() { std::cout << "B"; }
};

template<class T, class B, class... Args>
struct A_impl<typename std::enable_if<!std::is_same<B,double>::value>::type,
         T, B, double, Args...> {
    void operator()() { std::cout << "C"; }
};

template<class T,class... Args>
using A = A_impl<void,T,Args...>;