Passkey模式

以下内容参考自谷歌的代码:
原文地址

Passkey 模式用于以比简单地将其他类设置为友元类更细粒度的方式将类的部分方法暴露给另一个类。本质上,它涉及创建一个“passkey”类,该类只能由特定的其他类构造,并要求在调用您希望限制使用的方法时传入该 passkey 类的实例。其用法如下:

class Foo {
 public:
  Foo();
  ~Foo();

  void NormalPublicMethod();
  bool AnotherNormalPublicMethod(int a, int b);

  class BarPasskey {
   private:
    friend class Bar;
    BarPasskey() = default;
    ~BarPasskey() = default;
  };

  void HelpBarOut(BarPasskey, ...);
};

...

void Bar::DoStuff() {
  foo->HelpBarOut(Foo::BarPasskey(), ...);
}

Foo::BarPasskey 上的私有构造函数阻止除了 Bar 以外的任何类构造 Foo::BarPasskey,这意味着:

  • 只有 Bar 可以调用这些方法
  • Bar 可以通过将 Foo::BarPasskey 实例传递给其他类/函数来委托调用这些方法的能力
    这种方法在运行时实际上是免费的 - 会使用一些额外的字节的参数空间来传递 Passkey 对象。

鼓励将 BarPasskey 参数命名为未命名,以加强它不携带语义信息并且实际上不用于任何事情的概念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值