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"
...
};
我想要一个只能实例化为另一个 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"
...
};