【发布时间】:2019-10-23 10:36:09
【问题描述】:
我正在编写一些应该以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中扣除,但是在计算Array的模板参数4和5时似乎失败了。
错误 C2672:“foo”:找不到匹配的重载函数。
错误 C2784:“void foo(const Eigen::Array &)”:无法为"const Eigen::Array &" 来自 "Eigen::Array”。
在取 Eigen::Array 时是否可以避免这个问题,还是需要将 Eigen::ArrayBase 作为函数参数?我想避免这种情况,因为它掩盖了函数只采用这种特定类型的数组这一事实。
编辑:
正如 Jarod42 所指出的,模板参数应该是 int 类型。
Visual Studio 可以编译出现此错误的代码。
但是,它无法推断出参数_Rows,而其他编译器可以这样做。
Here你可以看到我遇到的问题。
【问题讨论】:
标签: c++ visual-studio eigen compiler-bug