C++ 在可变模板类的构造函数中初始化元组成员
假设我有一个变量类:C++ 在可变模板类的构造函数中初始化元组成员,c++,templates,stdtuple,C++,Templates,Stdtuple,假设我有一个变量类: 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&
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(???) : ??? { }
};
假设派生类中有正确的构造函数:
template<class... T>
class System
{
std::tuple<T...> variables;
public:
System(const T&... t) : variables(t...) { }
};
System<VAR1, VAR2> s({"VAR1", 10}, {"VAR2", 20});
模板
阶级制度
{
std::元组变量;
公众:
系统(常数T&…T):变量(T…{}
};
系统s({“VAR1”,10},{“VAR2”,20});
谢谢您的回答。现在我明白了,我应该重新考虑最初的想法,因为我不想在每个派生类中定义(相同的)构造函数:我想使用派生类作为标记,通过类型(扮演名称的角色)来区分不同的变量,而不是std::get
@Evgeny putusing Variable::Variable派生类中的code>也允许以这种方式初始化。此代码不是编译代码,您需要更改变量(t…)@Kapil Nice spot,谢谢!真不敢相信我竟然忘了这么明显的事情。
template<class... T>
class System
{
std::tuple<T...> variables;
public:
System(const T&... t) : variables(t...) { }
};
System<VAR1, VAR2> s({"VAR1", 10}, {"VAR2", 20});