【问题标题】:Eigen matrix as default argument to a function特征矩阵作为函数的默认参数
【发布时间】:2014-12-08 11:42:33
【问题描述】:

我知道一个事实,如果我想创建一个可能需要也可能不需要接受 Eigen 动态双矩阵的函数,我需要定义一个空动态矩阵,例如,在定义函数头之前的某个地方。

文件.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);

文件.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 成为可选参数?我试图在类定义上方声明空矩阵,但我需要模板类型名才能工作。

【问题讨论】:

    标签: c++ matrix eigen


    【解决方案1】:

    对于这种情况,您最好创建两个方法。一个有实参,一个没有参数,里面有参数化的调用。像这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多