模板友谊

Cem*_*ncu 10 c++ templates friend

我正在尝试使用不同的模板参数访问模板类的受保护变量.带有模板参数的朋友声明会出现以下错误:

不允许使用多个模板参数列表

我的代码是

template<class O_, class P_> 
class MyClass {
    //multiple template parameter lists are not allowed
    template<class R_> friend class MyClass<R_, P_> 
    //syntax error: template<
    friend template<class R_> class MyClass<R_, P_> 

public:
    template<class R_>
    ACopyConstructor(MyClass<R_, P_> &myclass) :
       SomeVariable(myclass.SomeVariable)
    { }

protected:
    O_ SomeVariable;
};
Run Code Online (Sandbox Code Playgroud)

如果我删除保护和朋友声明它的工作原理.

CB *_*ley 11

从标准:14.5.3/9 [temp.friend],"朋友模板不应被声明为部分特化.",因此您只能"成为"类模板或特定完整专业化的所有实例.

在您的情况下,由于您希望成为具有一个免费模板参数的实例化的朋友,您需要将类模板声明为朋友.

例如

template< class A, class B > friend class MyClass;
Run Code Online (Sandbox Code Playgroud)