假设我有这段代码:
class MyClass {
private:
class NestedPrivClass {};
public:
MyClass(NestedPrivClass){}
};
是否有办法让另一个类通过调用公共构造函数来创建MyClass
的实例?
不应该使用私有嵌套类作为公共函数中的参数是编译错误吗? (因为不可能打电话给他们。)
答案 0 :(得分:6)
不,这不应该是一个错误。仅仅因为名称是私有的并不意味着它是无效的类型。例如,如果我们添加一个返回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};
}