У меня проблема с этим кодом, основная идея - создать typedef "Base" с количеством cols, определенных в шаблоне:
// --- Row dynamic matrix
template< class T, int cols >
class RowDynamicMatrixRowMajor : public Eigen::Matrix< T, Eigen::Dynamic, cols,
Eigen::RowMajor | Eigen::AutoAlign >{
public:
typedef Eigen::Matrix< T, Eigen::Dynamic, cols, Eigen::RowMajor | Eigen::AutoAlign > Base;
RowDynamicMatrixRowMajor( void ) : Base()
{}
template< typename OtherDerived >
RowDynamicMatrixRowMajor( const Eigen::MatrixBase< OtherDerived > & other )
: Base( other )
{}
template< typename OtherDerived >
RowDynamicMatrixRowMajor & operator= ( const Eigen::MatrixBase< OtherDerived > & other )
{
this->Base::operator=( other );
return *this;
}
};
Но, компилируя код в visual studio 2012, я получаю эту ошибку:
Ошибка 1 ошибка C2975: '_Cols': неверный аргумент шаблона для 'Eigen :: Matrix'; ожидаемое постоянное выражение времени компиляции z:\desktop\photoconsistency-visual-odometry-master\phovo\include\Matrix.h 97 1 ФотоконсистенцияVisualOdometry
Для файла есть 20 подобных ошибок, но я не могу определить ошибку.
Я могу скомпилировать и запустить это без каких-либо проблем (g++ 4.9), поэтому это не является источником ошибки. Хотя это не ответ, я опубликовал его, так как не могу опубликовать код в комментарии.
template< class T, int cols >
class RowDynamicMatrixRowMajor : public Eigen::Matrix< T, Eigen::Dynamic, cols,
Eigen::RowMajor | Eigen::AutoAlign >
{
public:
typedef Eigen::Matrix< T, Eigen::Dynamic, cols, Eigen::RowMajor | Eigen::AutoAlign > Base;
RowDynamicMatrixRowMajor( void ) : Base()
{}
template< typename OtherDerived >
RowDynamicMatrixRowMajor( const Eigen::MatrixBase< OtherDerived > & other )
: Base( other )
{}
template< typename OtherDerived >
RowDynamicMatrixRowMajor & operator= ( const Eigen::MatrixBase< OtherDerived > & other )
{
this->Base::operator=( other );
return *this;
}
};
int main()
{
RowDynamicMatrixRowMajor<double, 10> a;
}
Как побочное замечание, вы уверены, что хотите получить от Эйгена? http://eigen.tuxfamily.org/dox/TopicCustomizingEigen.html
Мне гораздо проще набрать то, что мне нужно (вам нужна поддержка С++ 11 для псевдонимов шаблонов), например, в вашем случае:
template<typename Scalar, int cols> // Eigen::MatrixX<type> (where type = Scalar)
using RowDynamicMatrixRowMajor =
Eigen::Matrix<Scalar, Eigen::Dynamic, cols, Eigen::RowMajor | Eigen::AutoAlign>;
затем используйте его, например,
RowDynamicMatrixRowMajor<double, 10> a;
_Cols
объявленных где-либо в коде, который вы опубликовали.