2016-03-10 135 views
3

假设我有一个类变量:初始化元组成员在可变参数模板类的构造函数

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) */}; 

回答

4

假设你已经在派生类中正确的构造函数:

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

System<VAR1, VAR2> s({"VAR1", 10}, {"VAR2", 20}); 
+0

谢谢你的答案。现在我发现我应该重新考虑最初的想法,因为我不想在每个派生类中定义(相同)构造​​函数:我想使用派生类作为标记来区分不同类型的变量(扮演角色的角色),而不是数字在'std :: get <...>'。 – Evgeny

+0

@Evgeny在派生类中使用'使用变量::变量;'可以让它以这种方式初始化。 –

+0

这段代码不是编译你需要改变变量(t ...) – Kapil

相关问题