我想要一个只能实例化为另一个类的成员的类。
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/