2014-10-13 1 views
1

Eigen 동적 행렬을 받아 들일 필요가 없을 수도있는 함수를 만들고 싶다면 어딘가에 빈 동적 행렬을 정의해야한다는 사실을 알고 있습니다 내 함수 헤더가 정의되기 전에.고유 행렬 함수의 기본 인수로

현실은 그러나
void myFunction(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& inputMatrix) { 
    // do something 
} 

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, 나는 현재 템플릿 클래스와이 클래스의 기능과 옵션 같은 고유치 행렬을하고있다 일하고 있어요 매개 변수. 내가 별도의 TPP 파일에이 템플릿 클래스의 구현을 포함 시켰습니다

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

#include "myClass.tpp" 

이런 식으로 뭔가 ...

에서 MyClass.h 그래서 잘하면 여러 함수 선언을 할 수 있습니다. 이 경우 어떻게하면 inputMatrix을 선택적 매개 변수로 만들 수 있습니까? 나는 클래스 정의 위에 빈 행렬을 선언하려했지만 템플릿 typename이 필요하다.

답변

1

이 경우 두 가지 방법을 만드는 것이 좋습니다. 하나는 실제 매개 변수가 있고 다른 하나는 매개 변수가없는 호출이있는 매개 변수가 없습니다. 이 같은 것 :

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

일반적으로 오버로드 된 메서드는 이해하기 쉽고 유지 관리가 쉽습니다.