我有头文件,如下所示。
class A;
class B;
class C;
Class a {
A *a;
B *b;
C *c;
};
现在,Class a
未使用所有A
,B
,C
和其他40个人。我有大约40个前向声明...有可能优化它有人..所以,我可以在需要基础上声明指向类的指针,而不是浪费所有指向所有40个奇数类的指针的内存?
答案 0 :(得分:2)
您可以使用带类型代码的联合或boost :: variant
答案 1 :(得分:1)
我现在建议您创建一个父类,并将所有A,B,C等作为子项放置......然后在类中使用父类的列表,并将所需的子类放在上面它。但是出现这个问题实际上是由于错误的面向对象设计。例如,用Java学习系统的OO设计原理,然后在C ++中使用它们。
答案 2 :(得分:0)
承认你不能修改你的课程,并且承认你一次只使用一个,你可以使用工会加上一个ID或“动态输入的空白”:
unsigned gen_id()
{ static unsigned id=0; ++id; return id; }
template<class T>
unsigned id_of()
{ static id = gen_id(); return id; }
class a
{
void* m;
unsigned type;
public:
template<class T>
a(T* p) :m(p), type(id_of<T>())
{}
template<class T>
T* get() const
{ return (id_of<T>()==type)? static_cast<T*>(m): nullptr; }
};
您可以
访问数据A* pa = my_a.get();
if(pa) { /* what has to be done with A */ }
如果你需要不止一个,可以考虑一个持有a的矢量的类b。
对于更“标准化”的实施,您可以查看boost::any