首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用模板技巧访问私有成员

使用模板技巧访问私有成员
EN

Stack Overflow用户
提问于 2012-10-21 06:21:39
回答 3查看 4K关注 0票数 18

来自Johannes Schaub - litb的一篇博客文章

代码语言:javascript
运行
复制
template<typename Tag, typename Tag::type M>
struct Rob { 
  friend typename Tag::type get(Tag) {
    return M;
  }
};

// use
struct A {
  A(int a):a(a) { }
private:
  int a;
};

// tag used to access A::a
struct A_f { 
  typedef int A::*type;
  friend type get(A_f);
};

template struct Rob<A_f, &A::a>;

int main() {
  A a(42);
  std::cout << "proof: " << a.*get(A_f()) << std::endl;
}

既然get函数没有在class A中定义,那么如何从a对象调用它呢?

编辑:

我不明白为什么get必须有标记作为参数,而不是a.*get<A_f>() => ok,这是由于ADL机制

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12993219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档