特征矩阵作为函数的默认参数

时间:2014-10-13 19:59:05

标签: c++ matrix eigen

我知道如果我想创建一个可能需要或可能不需要接受Eigen动态双矩阵的函数,我需要定义一个空的动态矩阵,比如说,在定义我的函数头之前的某个地方。 / p>

file.h

Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> EMPTY(0,0);

void myFunction(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix); 
void myFunction(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix=EMPTY);

file.cpp

void myFunction(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix) {
     // do something
}

但实际情况是,我正在使用模板化类,此类中的函数有一个特征矩阵作为可选参数。像这样......

myClass.h

template<typename Number>
class myClass {
    void myFunction(Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix);
};

#include "myClass.tpp"

我已经在一个单独的tpp文件中包含了这个模板化类的实现,所以我希望有多个函数声明。在这种情况下,我怎样才能使inputMatrix成为可选参数?我试图在类定义上面声明空矩阵,但我需要模板typename才能工作。

1 个答案:

答案 0 :(得分:1)

对于这种情况,您最好创建两种方法。一个具有真实参数,一个没有参数,其中包含参数化调用。像这样:

template<typename Number>
class myClass {
    void myFunction(Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix);
    void myFunction()
    {
        myFunction(EMPTY);
    }
};

通常,重载方法更容易理解和维护。