c++ - 模板查询,访问私有(private)成员

标签 c++ templates

我指的是《thinking in c++》一书中提到的练习之一。 下面的代码片段会引发调用 h.play 的错误,据我所知,因为 成员我是私有(private)的。但我期待调用 me.play 时出现相同的错误。如果我评论调用 h.play 代码编译正常。为什么调用 me.play 没有报错?

class Buddy {};

template<class T> class My {
  int i;
public:
  void play(My<Buddy>& s) {
    s.i = 3;
  }
};

int main() {
  My<int> h;
  My<Buddy> me, bud;
  h.play(bud);
  me.play(bud);
}

谢谢。

[编辑] 有没有办法查看编译器为哪些代码生成了

My<int> h and 
My<Buddy> me 

? (任何类似于 -E 编译器标志的东西)?

最佳答案

成员对于具有相同类型的另一个对象的实例总是“公共(public)的”。

意思是My<Buddy>实例(例如 me )可以访问另一个 My<Buddy> 的私有(private)成员实例(例如 bud )。

请记住 My<int>是与 My<Buddy> 完全不同的类型,因此它无法访问这些成员。

关于c++ - 模板查询,访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754198/

相关文章:

c++ - 删除 SDL_PollEvent 导致程序崩溃

c++ - BB 10 解析后导航页面

c++ - 在没有特殊库的情况下验证 C++ 中的 float

c++ - OpenCL get_global_id

c++ - 如何将模板类型的常量应用于另一种类型

c++ - 使用模板而不是开关

c++ - 试图理解 boost 示例 httpserver3。 shared_ptr 重置方法不清楚

c++ - 如果我只使用一个翻译单元使用 extern 模板类,为什么我不会收到链接错误?

c++ - 编写自定义分配器

c++ - 是否可以根据约束 "overload"别名模板?