我正在努力实现这样的目标:

我有一个模板化的基类,我想动态继承

template<typename A, typename B>
class fooBase
{
public:
    fooBase(){};
    ~fooBase(){};
};

所需方法:(类似这样,不太确定如何做)
template <typename... Interfaces>
class foo : public Interfaces...
{
public:
    foo();
    ~foo();
}

我的目标是让foo类的行为如下:

第二种方法:
class foo()
    : public fooBase<uint8_t, float>
    , public fooBase<uint16_t, bool>
    , public fooBase<uint32_t, int>
    // and the list could go on
{
    foo();
    ~foo();
}

第二种方法的问题是,如果我实例化一个foo对象,它将一直继承这3个基类,我想更广泛地使用它;当实例化一个foo对象时,请使用可变参数模板为它提供基类的参数。类,以便我可以将foo类用于其他类型(也许将仅继承一​​个基类,也许继承五个)

谢谢

实例化foo的示例
foo<<uint8_t, float>, <uint16_t, bool>, <uint32_t, int>, /* and the list could go on and on */> instance

最佳答案

您可以尝试递归可变参数模板,一次使用2个参数来添加fooBase的派生类。

可能是这样的:

template<typename A, typename B>
class fooBase
{
public:
    fooBase(){};
    ~fooBase(){};
};

template<typename A, typename B, typename ... C>
class foo: public fooBase<A, B>, public foo<C ...> {
};

// termination version by partial specialization
template<typename A, typename B>
class foo<A, B>: public fooBase<A, B> {
};

然后,您可以声明:
foo<uint8_t, float, uint16_t, bool, uint32_t, int> bar;

和bar将是fooBase<uint8_t, float>fooBase<uint16_t, bool>fooBase<uint32_t, int>的子对象

关于c++ - C++ 11中的可变参数模板和多重继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35840960/

10-11 22:38
查看更多