Я пытаюсь создать сетку, которая использует Eigen:Matrix
; см. здесь для библиотеки.
Итак, давайте посмотрим на минимальный кусок кода:
template<typename Types, int... Sizes> class Grid;
template<typename... Types, int... Sizes>
class Grid<std::tuple<Types...>, Sizes...>
{
public:
using grid_type = std::tuple<Eigen::Matrix<Types, Sizes, 1>...>;
};
и затем в main
, например:
Grid<std::tuple<long, int>, -1, 10000>::grid_type;
Я получаю следующие три ошибки в VS2017 при компиляции:
Ошибка C3548 '_Rows': пакет параметров не может использоваться в этом контексте
Ошибка C2976 'Eigen :: Matrix': слишком мало аргументов шаблона
Ошибка C3546 '...': нет доступных пакетов параметров для расширения
Ошибка C3203 «Матрица»: шаблон неспециализированного класса нельзя использовать в качестве аргумента шаблона для параметра шаблона «_Types», ожидается реальный тип
Теперь, если бы вместо этого мы использовали что-то вроде std::array
, то даже с параметром -1 все в порядке (ну, это просто преобразуется в положительное значение size_t
):
using grid_type = std::tuple<std::array<Types, Sizes>...>;
grid_type
выходит как положено.
Теперь, что также странно, intellisense VS способен правильно оценить версию Eigen, но не может ее скомпилировать ...