我在创建非模板类的成员模板函数的特殊实例时遇到了麻烦。例如,我有一个带有模板成员函数 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
}
有没有办法以我想要的方式编写代码,或者这是不可能的?