C ++偏特:我怎样才能专注这个模板 这个模板 ?(c++ partial special

2019-06-25 08:09发布

#include <iostream>
using namespace std;

template <class T1, class T2>
class A {
public:
    void taunt() { cout << "A"; }
};

template <class T1>
class A<T1, T1> {
public:
    void taunt() { cout << "B"; }
};

class B {};

class C {};

int main (int argc, char * const argv[]) {

    A<B> a;

    return 0;
}

我如何转换我的两个参数模板的一个参数模板?

上面的代码将给出关于一个编译错误“A一个;” 对于“错号的模板参数”。

Answer 1:

模板特不能用于减少模板参数的个数,这样做,你应该使用默认设置一些参数。

所以为了让只有一个参数的使用情况,并作出使用打你的专业化,你需要为第二个参数,这是一样的第一个参数默认:

#include <iostream>
using namespace std;

template <class T1, class T2=T1>
class A {
public:
    void taunt() { cout << "A"; }
};

template <class T1>
class A<T1, T1> {
public:
    void taunt() { cout << "B"; }
};

class B {};

class C {};

int main (int argc, char * const argv[]) {

    A<B> a;
    a.taunt(); // Prints "B"

    return 0;
}


Answer 2:

您可以使用第二个实例化类型(显)默认:

template <class T1, typename T2 = void>
class A {
public:
    void taunt() { cout << "A"; }
};


文章来源: c++ partial specialization: How can I specialize this template to this template?