假设我有以下代码:

class MyClass {
private:
    class NestedPrivClass {};
public:
     MyClass(NestedPrivClass){}
};

有没有其他方法可以通过调用public构造函数来创建MyClass实例的方法?

使用私有(private)嵌套类作为公共(public)函数中的参数不应该是编译错误吗? (因为无法调用它们。)

最佳答案

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

class MyClass {
private:
    class NestedPrivClass {};
public:
     MyClass(NestedPrivClass){}
     static NestedPrivClass getNestedPrivClass() { return NestedPrivClass{}; }
};

然后,我们可以构造MyClass的对象,例如
int main()
{
    auto private_name = MyClass::getNestedPrivClass();
    MyClass foo{private_name};
}

09-25 18:14