一个类如何声明其所有可变参数模板参数的朋友?

时间:2013-11-23 23:08:55

标签: c++ metaprogramming variadic-templates

如果我有一个采用可变参数包模板参数的类,我怎么能声明它们都是朋友?

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

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;
    }
};

1 个答案:

答案 0 :(得分:0)

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

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的格式化)