c++ - 收集不同类型的类并在 C++ 中调用它们的方法

标签 c++ templates

在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 它们是完全不同的对象,对吧?不相关的。 但是我想用数组绑定(bind)它们,所以...

z[0] = b;
z[1] = c;
z[2] = d;

像这样。 我找到了一些解决方案,但是这些解决方案仅用于收集不同类型。 (对继承的对象使用 void* 数组或 vector )我也想访问他们的方法。

z[0] -> method_A2(3);
z[1] -> method_A3(5);

像这样。 遇到这种情况我该怎么办?

提前致谢。

最佳答案

typedef boost::variant<A<B>, A<C>, A<D>> AVariant;
std::array<AVariant, 3> z;

z[0] = *b;
z[1] = *c;
z[2] = *d;

然后您可以根据需要检查每个元素的类型,或者使用 boost::static_visitor“访问”它们,如下所示:http://www.boost.org/doc/libs/release/doc/html/variant.html

关于c++ - 收集不同类型的类并在 C++ 中调用它们的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972419/

相关文章:

java - 仅使用一个递归函数计算 1 到 n 的阶乘之和

c++ - 根据运行时决策组合不同的迭代器

java - 谷歌 Protocol Buffer - 用 C++ 编码,用 Java 解码 - InvalidProtocolBufferException

c++ - 通过引用时模板扩展失败?

c++ - 使用类方法的模板

c++ - 为什么 std::to_string() 没有模板化?

c++ - OpenCV : calcOpticalFlowSF function

c++ - 为什么可以比较最后一个元素?

c++ - 取决于模板类型参数的字符串文字?

templates - 在 IE8 中使用条件 knockout 模板