Я пишу некоторые функции, которые должны принимать Eigen::Array
в качестве ввода. Массивы имеют постоянный размер, но размер является параметром шаблона и должен вычитаться из входных данных. При компиляции с MSVS мне нужно указать размер функции, иначе это приведет к ошибке.
#include <Eigen/Core>
template<unsigned short t_iSize>
void foo(const Eigen::Array<unsigned short, t_iSize, 1>&)
{
}
int main()
{
Eigen::Array<unsigned short, 3, 1> test;
// foo(test); // Compiler errors C2672 and C2784
foo<3>(test); // Giving the size solves the errors
}
Размер можно вычесть из переменной test
, но, похоже,ошибка при вычислении аргументов шаблона 4 и 5 для массива.
Ошибка C2672: "foo": не найдено соответствующей перегруженной функции.
Ошибка C2784: "void foo (const Eigen):: Array &) ": не удалось вывести аргумент шаблона для" const Eigen :: Array & "from" Eigen :: Array ".
Можно ли избежать этой проблемы при получении Eigen :: Array, или мне нужно принять Eigen :: ArrayBase в качестве параметра функции? Я бы хотел этого избежать, поскольку он скрывает тот факт, что функция принимает только этот конкретный тип массивов.
Редактировать:
Как отметил Jarod42, параметр шаблона должен иметь тип int. Visual Studio может скомпилировать код с этой ошибкой. Однако он не может вывести параметр _Rows
, где другие компиляторы могут это сделать.
Здесь вы можете увидеть проблему, с которой я столкнулся.