C++ 设计模式 - 仅限成员 class

C++ design pattern - member-only class

我想要一个只能实例化为另一个 class 的成员的 class。

我估计:

class A
{
  public:
    A() :
      member_()
      {};
    void letBSayHi() { member_.sayHi(); }
  private:
    B   member_;
};
class B
{
  public:
    void sayHi() { printf("hola!"); }
};

因此:

A alpha;           // valid
alpha.letBSayHi(); // # hola!
B beta;            // invalid
beta.sayHi();      // impossible

单例模式显然行不通,因为我想要 class B 的每个实例对应 class A 的每个实例。但是除 class A 成员之外的任何 class B 实例都应该被禁止。

使 B 成为 A 的私有嵌套 class:

class A {
public:
  void letBSayHi() { member_.sayHi(); }
private:
  class B {
  public:
    void sayHi() { std::cout << "hola!"; }
  };

  B member_;
};

附录回复:评论:实现可以像这样与声明分开:

Header:

class A {
public:
  void letBSayHi();
private:
  class B {
  public:
    void sayHi();
  };

  B member_;
};

源文件:

void A::letBSayHi() { member_.sayHi(); }
void A::B::sayHi() { std::cout << "hola!\n"; }
//   ^^^^-- interesting part here

嗯,如果你想包括,为什么不呢?

class A {
#include "B.hpp"
...
};