gpt4 book ai didi

c++ - 为什么 Eigen 不需要模板关键字来使用 Matrix 的模板函数调用?

转载 作者:行者123 更新时间:2023-12-04 13:05:17 24 4
gpt4 key购买 nike

使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com