template <class T>
class Test
{
public:
template<class U> void f(); //generic function
template<> void f<char>(); //Specialization for char.
};
template <class T>
template<class U>
void Test<T>::f() //Definition of generic function
{
}
template<>
template<> void Test<char>::f<char>(){} //Definition of specialization.
int main()
{
Test<char> ob1;
ob1.f<char>(); //Works fine.
Test<int> ob2;
ob2.f<char>(); //Produces linker error.
}
Linker ошибкаЯвная специализация шаблона выпуск
error LNK2019: unresolved external symbol "public: void __thiscall
Test<int>::f<char>(void)"
Мое требование: я должен быть в состоянии пройти любого типа для тестирования класса и любого типа для функции Р(). Я должен иметь возможность использовать все комбинации типов, как показано ниже.
Test f() -------------- int char char int int int
я могу решить эту ошибку, определив другую функцию, как показано ниже.
template<>
template<> void Test<int>::f<char>(){}
Но что же такое использование класса Test в качестве шаблона? Как заставить его работать для всех комбинаций?
Было бы целесообразно, чтобы добавить, что ожидаемый метод будет выполнять для каждого элемента таблицы. То есть 'Test :: f ()' должен быть действительным и вызвать: a) общую реализацию, b) специализацию? –