主要观点:从 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 支持者。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。