【问题标题】:How to check class friendship?如何查看班级友谊?
【发布时间】:2019-05-20 21:01:58
【问题描述】:

标准库提供了很多有用的"is" typetraits 来说明两个类的关系,例如is_base_ofis_convertibleis_same 等。有什么方法可以实现一个typetrait is_friend 到判断A班是否是B班的朋友?

示例代码:

class A {};
class B { friend class A; };
class C { friend class B; };

is_friend<A, B>; // true
is_friend<B, A>; // false
is_friend<B, C>; // true
is_friend<A, C>; // false

【问题讨论】:

  • 我不知道,但既然朋友是编译器的提示,那有什么意义呢? AFAIK,它不会生成任何代码。
  • 我已经实现了这样的东西 -> stackoverflow.com/a/11748131/2565020 检查一个类是否是可反射的,而不是检查成员/函数的存在或创建一个标志,我认为它会更漂亮检查反射类是否是reflector的朋友
  • @Nighteen 可能是 this 在某种程度上是有帮助的。
  • 有什么用例吗?

标签: c++ friend typetraits


【解决方案1】:

不,这是不可能的。在您的示例中,B 中的任何内容都没有任何访问限制,因此A 的友谊无效。由于友谊既不是继承的也不是传递的,所以没有办法使用像从相关类继承和添加私有成员这样的技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 2014-07-18
    • 2011-07-08
    • 2015-07-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多