【问题标题】:Initialize tuple member in constructor of variadic template class在可变参数模板类的构造函数中初始化元组成员
【发布时间】:2016-03-10 20:03:19
【问题描述】:

假设我有一个变量类:

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 的构造函数,它将以某种方式将其 agruments 传递给 variables 以初始化它们中的每一个?我希望能够写出这样的东西:

class VAR1 : public Variable { };
class VAR2 : public Variable { };

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

【问题讨论】:

    标签: c++ templates stdtuple


    【解决方案1】:

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

    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::get&lt;...&gt; 中的数字。
    • @Evgeny 将using Variable::Variable; 放在派生类中也可以这样初始化。
    • 这段代码没有编译你需要改变变量(t...)
    • @Kapil 好地方,谢谢!不敢相信我忘记了这么明显的事情。
    猜你喜欢
    • 2017-02-02
    • 2016-07-14
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多