假设我有以下代码:
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};
}