#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;
}
Как преобразовать два параметра шаблона в шаблон одного параметра?C++ частичная специализация: как я могу выделить этот шаблон <class T1, class T2> в этот шаблон <class T1>?
Приведенный выше код даст ошибку компилятора на 'A a;' за «неправильное количество аргументов шаблона».
Было бы приятно добавить, почему вам нужен аргумент по умолчанию для достижения того, что он хочет ответить. Проблема вызвана неправильным пониманием того, что делает частная специализированная специализация. Это не позволяет вам уменьшить количество параметров шаблона в оригинальной декларации. Он говорит, что «если оба аргумента шаблона одинаковы, используйте этот». Еще +1 для правильного ответа. :) – vhallac
@vhallac: Хороший комментарий, сделано :) – Kleist