C++ class 大小模板推导
C++ class size template deduction
我有以下功能:
template <uint8_t N1, uint8_t N2, uint8_t N3>
Shape<N3> func(const Shape<N1> &shape1, const Shape<N2> &shape2)
{
return Shape<N3>();
}
形状定义:
template <uint8_t N> class Shape;
有没有办法通过传递给函数的 Shapes 推导出 N1 和 N2?
Shape<3> shape1 = {1, 2, 3};
Shape<2> shape2 = {4, 5};
Shape<4> shape3 = func<4>(shape1, shape2);
而不是:
Shape<4> shape3 = func<3, 2, 4>(shape1, shape2);
感谢您的帮助!
你应该安排你的模板参数,使需要显式指定的参数在开头,而可以从参数推导出的参数在结尾:
template <uint8_t N3, uint8_t N1, uint8_t N2>
Shape<N3> func(const Shape<N1> &shape1, const Shape<N2> &shape2)
{
return ...;
}
Shape<3> shape1 = {1, 2, 3};
Shape<2> shape2 = {4, 5};
Shape<4> shape3 = func<4>(shape1, shape2);
这里,N3
明确指定为 4,而 N1
和 N2
是从参数类型推导出来的,因此所有模板参数都有值并且代码可以编译。如果你在最后留下 N3
,那么你将被迫显式指定 N1
和 N2
以便显式指定 N3
.
我有以下功能:
template <uint8_t N1, uint8_t N2, uint8_t N3>
Shape<N3> func(const Shape<N1> &shape1, const Shape<N2> &shape2)
{
return Shape<N3>();
}
形状定义:
template <uint8_t N> class Shape;
有没有办法通过传递给函数的 Shapes 推导出 N1 和 N2?
Shape<3> shape1 = {1, 2, 3};
Shape<2> shape2 = {4, 5};
Shape<4> shape3 = func<4>(shape1, shape2);
而不是:
Shape<4> shape3 = func<3, 2, 4>(shape1, shape2);
感谢您的帮助!
你应该安排你的模板参数,使需要显式指定的参数在开头,而可以从参数推导出的参数在结尾:
template <uint8_t N3, uint8_t N1, uint8_t N2>
Shape<N3> func(const Shape<N1> &shape1, const Shape<N2> &shape2)
{
return ...;
}
Shape<3> shape1 = {1, 2, 3};
Shape<2> shape2 = {4, 5};
Shape<4> shape3 = func<4>(shape1, shape2);
这里,N3
明确指定为 4,而 N1
和 N2
是从参数类型推导出来的,因此所有模板参数都有值并且代码可以编译。如果你在最后留下 N3
,那么你将被迫显式指定 N1
和 N2
以便显式指定 N3
.