在可变参数模板类的构造函数中初始化元组成员

Initialize tuple member in constructor of variadic template class

本文关键字:构造函数 初始化 元组 组成员 变参 参数      更新时间:2023-10-16

假设我有一个变量类:

class Variable
{
  const std::string name;
  const double scale;
public:
  Variable(const std::string& _name, double _scale) : name(_name), scale(_scale) { }
};

现在我定义一个包含变量的系统类:

template<class... T>
class System
{
 std::tuple<T...> variables;
public:
 System(???) : ??? { }
};

如何定义System的构造函数,该构造函数将以某种方式将其集合传递给variables以初始化它们中的每一个?我希望能够写这样的东西:

class VAR1 : public Variable { };
class VAR2 : public Variable { };
System<VAR1, VAR2> s{ /* init values: ("VAR1", 10), ("VAR2", 20) */};

假设派生类中具有正确的构造函数:

template<class... T>
class System
{
    std::tuple<T...> variables;
public:
    System(const T&... t) : variables(t...) { }
};
System<VAR1, VAR2> s({"VAR1", 10}, {"VAR2", 20});