我想要一个只能被实例化为另一个类的成员的类。
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
的实例化都应该被禁止。
答案 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"
...
};