C ++使用模板中的变量初始化类中的对象

时间:2014-07-07 10:26:16

标签: c++ class templates c++11

我正在尝试使用以下代码初始化dMatrix

class BpmSolve
{
private:
    const int numZPts;
    Eigen::Matrix<float, 1, numZPts> dMatrix;

public:
    BpmSolve(numberZPoints);
};

BpmSolve::BpmSolve(int numberZPoints)
    : numZPts(numberZPoints),
{
}

代码错误,因为numZPts是一个变量。如果我用一个整数替换numZPts,则没有问题。

初始化此课程的正确方法是什么? C ++ 11选项很好。

感谢。

2 个答案:

答案 0 :(得分:3)

Eigen::Matrix是一个模板,模板参数必须在编译时可用。 numZPts的值在编译时不可用 - 每次构造BpmSolve对象时,它可能具有此字段的不同值,并且在编译时不知道该值。所以你要求的东西是不可能的。

答案 1 :(得分:1)

在编译时未定义numZPts值。如果该类的所有实例碰巧在整个代码中使用该值的常量,则只需将您的类转换为由其参数化的模板:

template <int numZPts>
class BpmSolve {
private:
    Eigen::Matrix<float, 1, numZPts> dMatrix;
    // [...]

BpmSolve::BpmSolve(){
}

实例成为:

BpmSolve<init> instance;

而不是

BpmSolve instance(init);

如果此类继承了子类,则可能会触发进一步的更改。