使用 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是成員模板
為什么 Eigentemplate在呼叫之前不強迫我添加cast?
我最好的猜測是m可能不是一個真正的依賴名稱(我可能是錯的)。如果有人可以向我展示源代碼行,那就太好了。我覺得這是一個很好的FEATHER,我想像作者一樣撰寫類似的代碼,以便讓我的用戶的生活更輕松。
uj5u.com熱心網友回復:
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>();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/346194.html
