假设我们有一个带有友元函数的模板类:
template<class T>
class A {
friend A operator+ (int, const A&);
};
此功能在以下某处实现:
template<class T>
A<T> operator+ (int i, const A<T>& a) {
...
}
还有下面的类模板的强制实例化:
template class A<int>;
这是否意味着operator+(int, A<int>)
会被编译?或者我是否必须单独强制实例化以实现它?
答案 0 :(得分:0)
模板参数不会自动转发到friend
声明。您还需要为该函数指定模板参数:
template<class T>
class A {
template<class U>
friend A<U> operator+ (int, const A<U>&);
};
实施几乎是正确的,应该是
template<class T>
A<T> operator+ (int i, const A<T>& a) {
// ^^^
// ...
}