C ++:具有任意数量初始化参数的模板类/函数

时间:2016-12-18 23:47:15

标签: c++ c++11 templates

我正在尝试在任意数量的维度的几何体中创建矢量的模板类。我想创建一个直观的构造函数,我可以传递等于维度编号的初始化程序数。例如:

template<int dim = 3, typename float_t=double> class Vec{
    float_t x[dim];
public:
    Vec(...) {
        //some template magic
    }
};


int main() {
    typedef Vec<3> Vec3d;
    typedef Vec<2> Vec2d;

    double x=1,y=2,z=3;
    Vec3d v(x,y,z);
    Vec2d w(x,y);
}

现在我缺乏黑魔法的知识 - 我的意思是C ++模板。我应该如何编写这个例子来实现我的目标?当然,我不想为每个案例编写每个确切的构造函数,这不是C ++模板的精神 - 我真的很有兴趣如何以聪明的方式实现它。

1 个答案:

答案 0 :(得分:6)

您需要parameter pack

template <typename... Args>
Vec(Args... args) : x{args...} {
    static_assert(sizeof...(Args) == dim, "Number of parameters should match dimension");
}

我还使用static_assert来确保用户输入与维度匹配的正确数量的参数。