我知道如果我想创建一个可能需要或可能不需要接受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才能工作。
答案 0 :(得分:1)
对于这种情况,您最好创建两种方法。一个具有真实参数,一个没有参数,其中包含参数化调用。像这样:
template<typename Number>
class myClass {
void myFunction(Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix);
void myFunction()
{
myFunction(EMPTY);
}
};
通常,重载方法更容易理解和维护。