C++26:可变参数友元

主要观点:从 C++26 起,友谊可授予“类型包”,此前函数、类等只能逐个声明为友元,C++26 简化了这一过程。
关键信息

  • 早期标准需逐个声明友元类模板,如template<class T=void, class U=void> class Foo { friend T; friend U; };,C++26 可直接用template<class... Ts> class Foo { friend Ts...; };
  • 介绍了“通行证惯用法”(Passkey idiom),通过Passkey类限制对类成员函数的访问,C++26 中利用可变参数友元简化代码。
  • 讲解了 CRTP(Curiously Recurring Template Pattern)模式中,在基类访问派生类私有部分时授予友谊,C++26 中可对“类型包”授予友谊。
    重要细节
  • Passkey类的构造函数为私有,只有特定类可实例化,通过传递Passkey对象来调用类的公共函数。
  • 在 CRTP 示例中,基类通过static_cast访问派生类私有成员,C++26 可对多个基类授予友谊。

总结:C++26 的这一特性可在合适情况下简化代码,如“通行证惯用法”和 CRTP 中对“类型包”授予友谊。若喜欢可点赞并订阅作者 newsletter 或成为 Patreon 支持者。

阅读 10
0 条评论