У меня возникли проблемы при создании специального экземпляра функции-члена класса, не являющегося шаблоном. У меня есть, например, класс A с функцией-членом шаблона F:
class A
{public:
template <class T> int F (T arg) const;
....
}
и хотите иметь специальный экземпляр этой функции-шаблона F для типа B:
class B;
...
template <> void A::F (B arg) const //GOOD!
и работает отлично, пока не появится, что B сам шаблон!
Этот код
template <class T> class B ...
...
template <> void A::F (B<T> arg) const //error, T undeclared
а также
template <class T> class B ...
...
template <class T> template <> void A::F (B<T> arg) const //error, too many templates
выдает ошибку компиляции.
Вторая проблема в том, как объявить этот специальный экземпляр (или экземпляр шаблона в целом) функцией-другом класса B? (Is не работает, даже если B не шаблон).
class B
{friend template <> void A::F (B arg) const // error
// as well as
template <> friend void A::F (B arg) const // error
}
Есть ли способ написать код так, как я собираюсь, или это невозможно?