您可以尝试递归可变参数模板,一次采用 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>
and fooBase<uint32_t, int>