У меня есть шаблон, который наследуется от другого шаблона, сам по себе в качестве параметра шаблона второго шаблона. Унаследовали шаблон определяет статическую функцию:Шаблон специализации с шаблоном для статической функции
template<class T> class A
{
public:
static void foo();
};
template<class T> class B : public A<B>
{
};
Теперь я хочу, чтобы реализовать статическую функцию для класса А специализированного с B, но B не специализирована. Но я не могу понять, как объявить шаблон. Я даже не уверен, что это возможно. Моя первая попытка была:
template<class T> void A<B<T>>::foo()
{
}
Но это дает ошибку:
"Nested name specifier 'A<B<T>>::" for declaration does not refer into a class, class template or class template partial specialization"
Я пробовал разные вещи, как добавляя «шаблон <>» перед, но ни один из тех, кто работал. Я могу скомпилировать это:
template<> void A<B<int>>::foo()
{
}
Как это:
template<class T> void A<T>::foo()
{
}
Это попытка частичной специализации? Мое первое впечатление - нет (нет шаблонов с несколькими параметрами, где я хочу специализироваться на одном из них). Скорее, я хочу специализировать шаблон с другим шаблоном, который не является специализированным. Возможно ли это, и если да, то какой правильный синтаксис?
Спасибо, я только что исправил. Я хочу реализовать статическую функцию для специализации A с B, но без специализации B. – sweatervest