Mat*_*che 5 c++ templates friend partial
我有一个简单的类X,还有一组模板化类Y <T,U>。我希望所有第一个模板化参数恰好是X的类Y都成为X本身的朋友。以下希望传达出我想要的内容,但是Friendly语句给出了编译错误。
template<typename T, typename U>
class Y {
};
class X {
public:
X(int value) : i(value) {}
const int& getI() const { return i; }
private:
int i;
template<class U> friend class Y<X,U>;
};
Run Code Online (Sandbox Code Playgroud)
我不确定朋友语句的模板化是否被允许(更不用说朋友语句的部分模板化了)。有没有办法做到这一点?还是我坚持一一列出所有朋友?
谢谢,马特
cppreference.com上的好友声明页面指定:
朋友声明不能引用部分专业化,但可以引用完全专业化
因此,正如chtz所说,您可以有一个非部分专业朋友。
编辑:
另请参阅关于stackoverflow的另一个答案:https : //stackoverflow.com/a/11046918/5776353
对于问题的非部分部分,语法是:
class X {
template<class T, class U> friend class Y;
};
Run Code Online (Sandbox Code Playgroud)
我想,在大多数情况下,这应该足够了。
使用 C++11,您实际上可以为模板化别名添加好友:
template<typename T, typename U>
class Y { };
class X {
public:
X(int value) : i(value) {}
const int& getI() const { return i; }
private:
int i;
template<class U> using YX = Y<X,U>;
template<class U> friend class YX;
};
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用(我不确定上面的朋友声明是否有任何影响)。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |