我在创建非模板类的成员模板函数的特殊实例时遇到问题。例如,我有一个具有模板成员函数f的类A:
class A
{public:
template <class T> int F (T arg) const;
....
}
对于类型B,希望有此模板函数f的特殊实例:
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的友元函数?(即使b不是模板也不起作用)。
class B
{friend template <> void A::F (B arg) const // error
// as well as
template <> friend void A::F (B arg) const // error
}
有没有一种方法可以用我想要的方式来编写代码,或者这是不可能的?