gpt4 book ai didi

c++ - 模板化隐式类型转换运算符

转载 作者:行者123 更新时间:2023-11-30 02:20:04 25 4
gpt4 key购买 nike

我已经实现了

template<int M, int N, typename T=double>
class matrix{
// ...
}

并希望能够使用 matrix<1,1,T>其中一个 T预计。

我应该如何做到这一点?以下是否可行?

template<typename T>
operator T(matrix<1, 1, T> mat) {
return mat(0,0);
}

(甚至期望遇到 matrix<1,1,T> 的原因是某些矩阵表达式具有该类型。例如,将 matrix<1,3> 乘以 matrix<3,1> 的结果为 matrix<1,1>。)

最佳答案

您列出的代码无法编译,因为您实质上是在尝试实现 T T 定义之外的构造函数;或者,如果它是基本类型或数组,则意义更小。

您可以做的是在您的矩阵类中实现一个转换运算符 - 通过将其添加到通用模板或专门化 matrix对于 M=1 和 N=1。

第一个选项看起来像这样:

template<int M, int N, typename T=double>
class matrix{
// ...
operator T() const {
static_assert(M == 1 and N==1,
"Attempting to treat a matrix with multiple cells as a scalar");
// code to return the single matrix element
}
}

第二个:

template<int M, int N, typename T=double>
class matrix{
// ...
}


template<typename T=double>
class matrix<1, 1, T>{
// ... some code duplication here with the main template; or maybe
// actually have different implementation banking on the fact that
// it's really just a scalar.

operator T() const {
// code to return the single matrix element
}
}

但坦率地说,我认为我不会推荐这些选项中的任何一个。我可能会执行以下操作之一:

  • 改变采用 T 的函数,使其“自然地”采用 1x1 矩阵(例如通过模板)
  • 改变采用 T 的函数,以便它可以“自然地”采用任何 矩阵。许多标量工作都对矩阵进行了有趣的推广。
  • 明确转换,也许写一个 template <typename T> T as_scalar(const matrix<1,1,T> m)功能。

关于c++ - 模板化隐式类型转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com