使用 c++17 和 Eigen 3.4.0 的 MWE
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix<float, 2, 2> m;
m << 1.0, 2.0, 3.0, 4.0;
m.cast<double>();
// m.template cast<double>();
return 0;
}
阅读 Eigen 文档后 TopicTemplateKeyword和 热门SO答案where-and-why-do-i-have-to-put-the-template-and-typename-keywords
我有点知道为什么/什么时候我们需要 template
关键字。但是,现在我不明白为什么当我忘记使用 template
时上面的代码没有发出错误消息:
m.cast<double>();
看起来它符合 Eigen 文档中“必须使用模板”的每条规则。
m
是依赖名cast
是成员模板
为什么 Eigen 不强制我在调用 cast
之前添加 template
?
我最好的猜测是 m
可能不是真正的相关名称(我可能是错的)。如果有人可以向我展示源代码行,那就太好了。我觉得这是一个不错的 FEATHER,我想作为作者编写类似的代码,让我的用户的生活更轻松。
最佳答案
m
不是从属名称。
如果依赖名称依赖于封闭模板的模板参数,则它们只能在模板内部有依赖名称。
例子:
template <typename T>
void foo()
{
Matrix<T, 2, 2> m; // Note that `T` has to be involved.
m << 1.0, 2.0, 3.0, 4.0;
m.template cast<double>();
}
关于c++ - 为什么 Eigen 不需要模板关键字来使用 Matrix 的模板函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69807142/