首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译时模板值推演

编译时模板值推演
EN

Stack Overflow用户
提问于 2015-09-01 20:59:27
回答 1查看 138关注 0票数 0

我有这个模板矩阵结构(我提供了一个接受std::initializer_list的构造函数):

代码语言:javascript
复制
template<int rows, int cols, typename scalar = float>
struct matrix;

使用矩阵结构外部定义的乘积运算符,如下所示:

代码语言:javascript
复制
template<int n, int m, int p, typename scalar>
matrix<n, m, scalar> operator*(const matrix<m, p, scalar>& left, const matrix<p, n, scalar>& left);

然后在结构中声明为朋友。所以如果我实例化两个矩阵:

代码语言:javascript
复制
matrix<2, 3> A = { 1, 2, 3, 4, 5, 6 };
matrix<3, 2> B = { 7, 8, 9, 10, 11, 12 };

我想创建一个矩阵C=A* B,我必须这样写:

代码语言:javascript
复制
matrix<2, 2> C = A * B;

这很好,但是有什么方法可以省略<2,2>模板吗?我相信它可以在编译时扣除(因为auto工作得很好):

代码语言:javascript
复制
auto C = A * B; // no errors

我想只写matrix而不写auto,可以吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-01 21:03:27

不,你不能(如果你没有一些非模板基矩阵)。matrix不是一种类型,它是模板,您应该指定模板参数。auto是你能做的最简单的事情。或者,您可以使用decltype代替auto

代码语言:javascript
复制
decltype(A * B) C = A * B;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32332337

复制
相关文章

相似问题

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