以私有类为参数的公共函数

Rai*_*ain 2 c++ types private class access-control

假设我有这个代码:

class MyClass {
private:    
    class NestedPrivClass {};
public:
     MyClass(NestedPrivClass){}
};
Run Code Online (Sandbox Code Playgroud)

有没有办法让另一个类MyClass通过调用公共构造函数来创建实例?

不应该使用私有嵌套类作为公共函数中的参数是编译错误?(因为不可能打电话给他们.)

Nat*_*ica 6

不,这不应该是一个错误.仅仅因为名称是私有的并不意味着它是无效的类型.例如,如果我们添加了一个返回NestedPrivClass类似的公共静态函数

class MyClass {
private:    
    class NestedPrivClass {};
public:
     MyClass(NestedPrivClass){}
     static NestedPrivClass getNestedPrivClass() { return NestedPrivClass{}; }
};
Run Code Online (Sandbox Code Playgroud)

然后我们可以构建一个MyClass类似的对象

int main()
{
    auto private_name = MyClass::getNestedPrivClass();
    MyClass foo{private_name};
}
Run Code Online (Sandbox Code Playgroud)