Динамические типы собственных объявлений с использованием шаблонов - PullRequest
1 голос
/ 26 июня 2019

Я пишу простую программу для определения систем с векторами, представляющими состояния.Я хотел бы иметь тип объявления вектора Eigen в зависимости от количества состояний в производном классе.

Я пытался добиться этого, используя шаблоны для псевдонимов, что-то вроде кода, показанного ниже

#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>

using  namespace std;
using  namespace Eigen;

class A
{
public:
    template <int T>
    using StateVector = typename Matrix<double, T, 1>;
};

class B : public A
{
public:
    int NUM_STATES = 5;
    B(){
        StateVector<NUM_STATES> a;
        a.setIdentity();
        cout<<a<<endl;
    }
};

int main(){
    B b;
}

В конечном итоге я хочу иметь тип, который можно использовать в производных классах.Это возможно?

1 Ответ

1 голос
/ 26 июня 2019

С двумя небольшими изменениями ваш код работает нормально.

Во-первых, здесь не должно быть ключевого слова typename:

template <int T>
using StateVector = Matrix<double, T, 1>;

Во-вторых, NUM_STATES должна быть константой времени компиляции, то есть либо объявлять ее как элемент enum, либо как static const int (или static constexpr int, если хотите):

static const int NUM_STATES = 5;

Полный рабочий пример по Годболту: https://godbolt.org/z/_T0gix

...