可变模板中的多重继承 class & 调用构造函数

Multiple inheritance in variadic template class & calling constructors

假设我有这个例子:

//Two interfaces
class InterfaceA {
public:
    InterfaceA(int val);
};

class InterfaceB {
public:
    InterfaceB(int val);
};

//Class with multiple inheritance
template <typename... Intefaces>
class Base : public Interfaces... {
public:
    Base() : Interfaces(42) {}; // This is wrong
}

如何使用单个参数调用 "Interfaces" 类 的构造函数?

正确的语法是

Base() : Interfaces(42)... {}

这里Interfaces(42)...是一个pack expansion模式Interfaces(42),这意味着它扩展到一个token列表,每个token对应一个token包装,类似于 Interfaces 替换为类型的模式。

有关更深入的说明,请参阅 this link