为什么 Eigen 不需要模板关键字来使用 Matrix 的模板函数调用?
Why Eigen doesn't need template keywords for using template function call of Matrix?
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
我有点知道 why/when 我们需要 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++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
我有点知道 why/when 我们需要 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>();
}