Mih*_*Pop 5 c++ inheritance templates variadic-templates c++11
我正在努力实现这样的目标:
我有一个要动态继承的模板化基类
template<typename A, typename B>
class fooBase
{
public:
fooBase(){};
~fooBase(){};
};
Run Code Online (Sandbox Code Playgroud)
所需方法:(类似这样,不太确定该怎么做)
template <typename... Interfaces>
class foo : public Interfaces...
{
public:
foo();
~foo();
}
Run Code Online (Sandbox Code Playgroud)
我的目标是让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();
}
Run Code Online (Sandbox Code Playgroud)
第二种方法的问题是,如果我实例化一个foo对象,它将一直继承这3个基类,我想更广泛地使用它;当实例化foo对象时,请使用可变参数模板为其提供基参数类,以便我可以将foo类用于其他类型(也许将仅继承一个基类,也许继承五个)
谢谢
实例化foo的示例
foo<<uint8_t, float>, <uint16_t, bool>, <uint32_t, int>, /* and the list could go on and on */> instance
Run Code Online (Sandbox Code Playgroud)
将 foo 更改为与此类似的内容:
template<typename... Interfaces>
class foo : public Interfaces... {
public:
foo(Interfaces... ifaces) : Interfaces(ifaces)... {}
};
Run Code Online (Sandbox Code Playgroud)
您可以尝试递归可变参数模板,一次采用 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> {
};
Run Code Online (Sandbox Code Playgroud)
然后您可以声明:
foo<uint8_t, float, uint16_t, bool, uint32_t, int> bar;
Run Code Online (Sandbox Code Playgroud)
fooBase<uint8_t, float>和 bar 将是,fooBase<uint16_t, bool>和 的子对象fooBase<uint32_t, int>