C ++类模板函数可以访问嵌套类的私有成员

乔恩·林格

以下代码无法按预期编译:

#include<iostream>
class Enclosing {
    int x;
    class Nested { int y; };

    void EnclosingFun(Nested *n) {
        std::cout << n->y;  // Compiler Error: y is private in Nested
    }
};

但是,如果我将EnclosingFun更改为模板成员函数,则编译器(gcc-7)不会抱怨访问y:

#include<iostream>
class Enclosing {      
    int x;
    class Nested { int y; };

    template <typename T>
    void EnclosingFun(Nested *n, T t) {
        std::cout << t << n->y;  // OK? Why?
    }      
};

这是gcc中的错误吗?还是c ++对于模板成员函数访问嵌套类有不同的访问规则?

songyuanyao

这是gcc中的错误吗?还是c ++对于模板成员函数访问嵌套类有不同的访问规则?

都不行

根据标准§17.8.1隐式实例化[temp.inst]

实现不得隐式实例化函数模板,变量模板,成员模板,非虚拟成员函数,成员类,类模板的静态数据成员或constexpr if语句的子语句([stmt。 if]),除非需要此类实例化。

就是说,Enclosing::EnclosingFun()这里没有实例化。将调用添加到它会导致它被实例化,然后您将得到错误,例如

prog.cc:8:30: error: 'int Enclosing::Nested::y' is private within this context
         std::cout << t << n->y;  // OK? Why?
                           ~~~^

生活

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Swift扩展访问Objective-C类的私有成员?

来自分类Dev

错误C2248:“ CvSVM :: CvSVM”:无法访问在类“ CvSVM”中声明的私有成员

来自分类Dev

C ++:访问该类的私有成员

来自分类Dev

错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

来自分类Dev

C ++-访问基类的受保护/私有成员

来自分类Dev

成为私有成员(c ++类)意味着什么?

来自分类Dev

访问私有嵌套类成员C#

来自分类Dev

c ++模板模板:无法访问私有成员

来自分类Dev

C ++访问私有类成员

来自分类Dev

如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

来自分类Dev

使公共成员变量访问C ++中同一类的私有成员

来自分类Dev

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

来自分类Dev

无法从C ++中的类内部访问私有成员?

来自分类Dev

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

来自分类Dev

错误C2248:无法访问在类中声明的私有成员

来自分类Dev

从私有结构数据成员访问C ++类的公共成员函数

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

来自分类Dev

错误C2248:无法访问在类中声明的私有成员,编译器行为异常

来自分类Dev

如何获得通用函数指针作为C ++类的私有成员?

来自分类Dev

C ++朋友类可以访问其基类的所有成员吗?

来自分类Dev

C ++如何在std :: for_each内部的类中访问私有成员

来自分类Dev

在C ++中访问模板类的私有构造函数

来自分类Dev

抽象类可以在C ++ 11中具有构造函数和私有成员吗

来自分类Dev

没有私有成员的 C# 类成员验证

来自分类Dev

无法使用派生类访问类的私有成员的 C++ 代码

来自分类Dev

c ++类模板部分特化而不特化所有成员函数

来自分类Dev

c++ - 如何从所有成员在c ++中都是公共的封闭类访问嵌套类成员函数?

来自分类Dev

为什么 C++ 模板类可以访问其基类的私有成员?

Related 相关文章

  1. 1

    如何从Swift扩展访问Objective-C类的私有成员?

  2. 2

    错误C2248:“ CvSVM :: CvSVM”:无法访问在类“ CvSVM”中声明的私有成员

  3. 3

    C ++:访问该类的私有成员

  4. 4

    错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

  5. 5

    C ++-访问基类的受保护/私有成员

  6. 6

    成为私有成员(c ++类)意味着什么?

  7. 7

    访问私有嵌套类成员C#

  8. 8

    c ++模板模板:无法访问私有成员

  9. 9

    C ++访问私有类成员

  10. 10

    如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

  11. 11

    使公共成员变量访问C ++中同一类的私有成员

  12. 12

    如何启用朋友类的朋友功能直接在C ++中访问其私有成员

  13. 13

    无法从C ++中的类内部访问私有成员?

  14. 14

    C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

  15. 15

    错误C2248:无法访问在类中声明的私有成员

  16. 16

    从私有结构数据成员访问C ++类的公共成员函数

  17. 17

    访问派生类C ++的私有成员

  18. 18

    错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

  19. 19

    错误C2248:无法访问在类中声明的私有成员,编译器行为异常

  20. 20

    如何获得通用函数指针作为C ++类的私有成员?

  21. 21

    C ++朋友类可以访问其基类的所有成员吗?

  22. 22

    C ++如何在std :: for_each内部的类中访问私有成员

  23. 23

    在C ++中访问模板类的私有构造函数

  24. 24

    抽象类可以在C ++ 11中具有构造函数和私有成员吗

  25. 25

    没有私有成员的 C# 类成员验证

  26. 26

    无法使用派生类访问类的私有成员的 C++ 代码

  27. 27

    c ++类模板部分特化而不特化所有成员函数

  28. 28

    c++ - 如何从所有成员在c ++中都是公共的封闭类访问嵌套类成员函数?

  29. 29

    为什么 C++ 模板类可以访问其基类的私有成员?

热门标签

归档