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

标签 c++ design-patterns singleton

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

ID:

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

单例模式显然行不通,因为我希望每个 A 类实例都有一个 B 类实例。但是除了作为类 A 成员之外,任何类 B 的实例化都应该被禁止。

最佳答案

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

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

关于C++ 设计模式 - 仅限成员类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447134/

相关文章:

c++ - 高效解析FIX消息c++

c++ - 长12位数字?

Android 应用程序架构 - 建议的模型是什么?

java - 单例的抽象基枚举/类

c# - WCF 静态变量在每次调用时重置

c++ - Qt 5.5 和 Qt Installer Framework 2.0.1 : Logo is not displayed despite being present in config. xml

c++ - set.clear() 在删除元素之前调用包含元素的析构函数

java - 编写一个更简洁、更模块化的命令解析器

asp.net-mvc - 微软的MVC实现与经典的MVC模式有区别吗

c++ - 有人曾经将 boost::singleton 与 boost::logger 一起使用过吗?