首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用矩阵的模板函数调用不需要模板关键字?

为什么使用矩阵的模板函数调用不需要模板关键字?
EN

Stack Overflow用户
提问于 2021-11-02 08:12:21
回答 1查看 128关注 0票数 3

带c++17和特征3.4.0的MWE

代码语言:javascript
运行
复制
#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;
}

在阅读了特征文档TopicTemplateKeyword和流行之后,所以回答where-and-why-do-i-have-to-put-the-template-and-typename-keywords

我有点知道为什么/当我们需要template关键字。然而,现在我不明白当我忘记使用template时,上面的代码为什么不发出错误消息

代码语言:javascript
运行
复制
m.cast<double>();

看起来它与特征文档中“必须使用模板”的每个规则相匹配。

  • m是一个依赖的名称
  • cast是一个成员模板

为什么艾根不强迫我在调用template之前添加cast

我最好的猜测是,m可能不是一个真正依赖的名称(我可能是错的)。如果有人能给我看源代码行,那就太好了。我觉得这是一个不错的羽毛,我想以作者的身份编写类似的代码,这样我的用户的生活就更容易了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 08:20:14

m不是从属的名称。

如果依赖于封装模板的模板参数,则只能在模板的中具有依赖的名称

示例:

代码语言:javascript
运行
复制
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>();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69807142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档