C++模板实参设为具体数值?

发布于 2022-09-11 20:03:48 字数 203 浏览 19 评论 0

看到C++第三方矩阵库Eigen,这里使用时:

/* 用typedef定义了很多模板,例如:Matrix4f 表示 4×4 的floats 矩阵 */ 
typedef Matrix<float, 4, 4> Matrix4f;

这是什么情况,为什么模板实参直接是数值4了?模板实参不应该是类型吗,这个怎么做到的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情话墙 2022-09-18 20:03:48

c++函数模板(function template)是能够使用泛型类型(generic type)作为参数的特殊函数(当然也可以使用具体的类型和类作为参数),我们可以使用泛型类型(typename)或泛型类(classname)作为参数传入。函数模板是在编译期间扩展(expand)的,用具体的type和class替换。Eigen中Matrix的定义是Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>,使用Matrix<float, 4, 4>将模板扩展,可以看到声明中的最后两个参数的类型就是具体的类型int,所以扩展的时候用4也是正确的,可以参考Eigen document

揽清风入怀 2022-09-18 20:03:48

没什么,泛型是c++先引进的,c++的泛型参数不仅可以是类型,还可以是数值,因为c++是编译型语言,数值的泛型参数很容易处理。

后来的java,c#之类的语言仿造c++的模板实现泛型,但好像都没有没有继承c++的数值型泛型参数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文