强制实现友元函数的实例化

时间:2015-10-02 21:49:43

标签: c++ templates

假设我们有一个带有友元函数的模板类:

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>)会被编译?或者我是否必须单独强制实例化以实现它?

1 个答案:

答案 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) {
                           // ^^^
    // ...
}