gpt4 book ai didi

c++ - 一个类如何声明它的所有可变模板参数 friend ?

转载 作者:太空宇宙 更新时间:2023-11-04 14:32:11 25 4
gpt4 key购买 nike

如果我有一个类接受模板参数的可变包,我如何将它们全部声明为友元?

这是我想用伪代码形式做的事情:

template<typename... Ts>
class AbstractMyClass {
int privateInt;
friend Ts...;
};
class OtherClass;
using MyClass = AbstractMyClass<OtherClass>;

class OtherClass {
public:
void foo(MyClass &c){
c.privateInt = 42;
}
};

最佳答案

这只能使用“编译时递归”来完成,就像元组一样。要点是(我现在在一台小型笔记本电脑上,绝对无法舒适地打字):

template<class .... THINGS> class object;

template<class T> class object {
friend T;
};

template<class T,class ... THINGS>
class object: public object<THINGS> {
friend T;
};

如果 C++ 不喜欢那样,试试 template<> class object<> {};作为结束递归的那个(我在 1 个模板参数中用 object 终止它)

(感谢 Dietmar Kuhl 的格式化)

关于c++ - 一个类如何声明它的所有可变模板参数 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com