【问题标题】:Public function taking private class as parameter以私有类为参数的公共函数
【发布时间】:2017-11-29 13:30:41
【问题描述】:

假设我有这个代码:

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

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

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

【问题讨论】:

  • 调用它也不是不可能,你只需要通过其他方式得到一个NestedPrivClass
  • 你想做什么?你可以这样使用它,例如:static MyClass* MyClass::Create() { return new MyClass( NestedPrivClass() ); }

标签: c++ class types private access-control


【解决方案1】:

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

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

然后我们可以构造一个MyClasslike的对象

int main()
{
    auto private_name = MyClass::getNestedPrivClass();
    MyClass foo{private_name};
}

【讨论】:

  • 是我还是 auto 绕过访问限制?在使用auto 的地方显式使用MyClass.NestedPrivClass 会导致编译错误,对吧?
  • @Arkadiy 见:stackoverflow.com/questions/13532784/…。这是预期的行为。
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多