C ++设计模式 - 仅限成员的类

时间:2015-04-04 13:42:29

标签: c++ design-patterns singleton

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

Id est:

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

单例模式显然不起作用,因为我想为类B的每个实例创建一个类A的实例。但是,除了作为类B成员之外,任何类A的实例化都应该被禁止。

2 个答案:

答案 0 :(得分:5)

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

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

  B member_;
};

补遗:评论:实施可以像这样的声明分开:

部首:

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

答案 1 :(得分:0)

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

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