У меня есть иерархия классов, которые содержат некоторые собственные матрицы в качестве членов, но их размер зависит от производного класса.Я хочу иметь возможность объявлять матрицы в базовом классе, но иметь размер, используемый в производном классе.Я думал, что мог бы использовать CRTP для этого, но я не уверен, что я использую его правильно.Вот код, который я пробовал
template<typename T>
class Base {
public:
const int matSize = static_cast(T*)(this)->_matSize;
Eigen::Matrix<int, matSize, mastSize> Mat = Eigen::Matrix<int, matSize, matSize>::Zero();
virtual void print() { std::cout << Mat << std::endl; };
};
class Derived1 : public Base<Derived1>{
public:
const int _matSize = 3;
};
class Derived2 : public Base<Derived2>{
public:
const int _matSize = 4;
};
int main(){
Derived1 d1;
d1.print(); // print a 3x3 zero matrix
Derived2 d2;
d2.print(); // print a 4x4 zero matrix
std::cin.get();
return 0;
}
Однако это не работает.Есть ли способ добиться чего-то подобного?
Редактировать:
Основная причина для выполнения вышеупомянутого состоит в том, что у меня есть функции, которые выполняют некоторую матричную алгебру, которая будет работать независимо от размера.Поэтому я хотел бы иметь возможность вызывать эту функцию для объектов различных производных классов и просто иметь возможность использовать одну и ту же функцию вместо того, чтобы иметь отдельные функции для каждого размера матрицы.
Кроме того, чтобы иметь интерфейс, который любойОбъект типа Base будет иметь матрицу Mat, размер которой будет зависеть от того, из какого производного класса Base он был создан.