【发布时间】:2015-11-28 14:29:04
【问题描述】:
C++中有没有办法收集不同类型的类并调用它们的方法? 我想做的是如下,
template<namespace T>
class A
{
A method_A1(T a)
{
...
}
void method_A2(int aa)
{
...
}
...
};
class B
{
...
};
class C
{
...
};
class D
{
...
};
A<B> *b;
A<C> *c;
A<D> *d;
b -> method_A2(3);
c -> method_A2(5);
在这个代码对象 b,c,d 中,它们是完全不同的对象,对吧?不相关的。 但是我想用数组绑定它们,所以...
z[0] = b;
z[1] = c;
z[2] = d;
像这样。 我找到了一些解决方案,但是这些解决方案仅用于收集不同的类型。 (对继承对象使用 void* 数组或向量)我也想访问它们的方法。
z[0] -> method_A2(3);
z[1] -> method_A3(5);
像这样。 在这种情况下我该怎么办?
提前致谢。
【问题讨论】:
-
编译器如何知道 z[0] 具有 method_A2 除非 z 是一个对象数组,它们都具有 method_A2?如果类之间没有公共接口,在 C++ 中就无法做到这一点。
-
如果函数
method_A1没有使用模板类型,您可以添加一个带有纯虚函数的基类,A将从中继承。 -
最接近标准 C++ 的是
std::tuple。但一切都需要在编译时收集。