#c #c 11 #templates #eigen
#c #c 11 #шаблоны #eigen
Вопрос:
Я могу найти определение шаблона для матриц: Eigen::Matrix<T,4,5> v;
https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html . Однако я не смог найти для векторов. Следовательно, я хочу определить аналогичный способ для векторов, но внутри класса шаблонов, т. Е. EigenVector
Как Тот же тип T его класса следующим образом:
template <typename T>
class HagenDWT
{
public:
template <typename T, int Size> using EigenVector = Eigen::Matrix<T, Size, 1>;
//rest of the code
private:
};
Однако, если я определяю EigenVector
как:
template <typename M, int Size> using EigenVector = Eigen::Matrix<T, Size, 1>;
Все работает нормально. Я хочу определить EigenVector
то же, что и его тип класса T. Если это возможно, не могли бы вы предложить, что изменить?
Комментарии:
1. Если вы не хотите параметризовать псевдоним заново
typename M
, зачем добавлять его в качестве параметра шаблона? Просто используйtemplate <int Size>
.2. Поскольку у внешнего класса есть
T
параметр шаблона, если вы хотите, чтобы внутренний шаблон использовал тот же тип, вам не нужно включать другойT
параметр во внутренний шаблон:template <int Size> using EigenVector = Eigen::Matrix<T, Size, 1>;
в противном случае, если вы хотите, чтобы внутренний шаблон использовал другой тип, игнорируйтеT
и используйтеM
вместо этого:template <typename M, int Size> using EigenVector = Eigen::Matrix<M, Size, 1>;
3. … и если вы хотите, чтобы он использовался
T
по умолчанию, но с возможностью указать другой тип:template <int Size, typename M = T> using EigenVector = Eigen::Matrix<M, Size, 1>;
4. Спасибо всем, эти комментарии были действительно полезны, да, сейчас это работает
5. Это должно быть закрыто? Это странно, потому что вопрос отвечает сам на себя: » Все работает нормально». Была просто нереализация, которая
EigenVector
уже была определена как совпадающаяT
с ее классом, по желанию, плюс неиспользуемыйM
параметр.