当前位置:  开发笔记 > 编程语言 > 正文

访问私有嵌套类

如何解决《访问私有嵌套类》经验,为你挑选了1个好方法。

我做了这个简单的课程,仍然在玩我的想法:

class A {
private:
    class B {};

public:
    B getB() {
        return B();
    };
};

从C++ 03开始,这个类编译得很好,但是没有很好的方法可以将结果分配给getB()左值,在这个意义上:

A::B b = A().getB();

不编译.

我通过使用中间模板得到它,以这种方式:

template 
struct HideType {
    typedef T type;
};

HideType::type b = A().getB();

但这看起来很糟糕,因为这个简单的任务是得到一个A :: B左值变量.

从C++ 11开始就不再这样了,或者至少它不适用于gcc.此代码仍无效:

A::B b = A().getB();

但这有效的:

auto b = A().getB();

标准方面是否存在漏洞?



1> Victor Dyach..:

从标准,第11条(会员访问控制):

班级成员可以是
私人的; 也就是说,它的名称只能由声明它的类的成员和朋友使用.
- 受保护; 也就是说,它的名称只能由声明它的类的成员和朋友,从该类派生的类以及他们的朋友使用(见11.4).
- 上市; 也就是说,它的名称可以在没有访问限制的任何地方使用.

因此,访问控制应用于名称.

auto b = A().getB();

根据标准,你不使用私人名称,因此它是合法的

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有