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

C++ Initialising Object In Class With Variable In Template

本文关键字:对象 初始化 变量      更新时间:2023-10-16

我正在尝试使用以下代码初始化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选项就可以了

谢谢。

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

numZPts值在编译时没有定义。如果该类的所有实例碰巧在整个代码中都使用该值的常量,则可以简单地将该类转换为由它参数化的模板:

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

实例成为:

BpmSolve<init> instance;
不是

BpmSolve instance(init);

如果这个类有继承的子类,这可能会触发进一步的更改。