C++ template double std::complex<double> 范数和积

标签 c++ class templates std norm

我编写了一个适用于 double 和 std::complex 的模板类。正如它所设想的那样,我所有的方法都在 .hpp 文件中。除了一个。我必须专门研究一种方法,因为在某些地方我必须计算 double 的平方或 std::complex 的范数。对于“双重特化”(A) 更明确:

double a(2.0);
double b(0.0);
b = a*a;

对于“复杂特化”(B):

std::complex<double> a(2.0,3.0);
double b(0.0);
b = std::norm(a);

我的问题是:

  • 有没有一种方法可以通过使用同时适用于 double 和 complex 的函数来避免这些特化? (因为 std::norm 仅适用于复杂...)

  • 或者唯一的解决方案是将特化 (A) 的双 a 转换为复数,然后仅使用特化 (B) 作为通用模板(同时适用于 double 和复数)?

最佳答案

您可以通过引入自己的函数作为方形/范数包装器来最小化发散情况:

template <typename T>
double square_or_norm(T x);

template<>
inline double square_or_norm(double x) { return x * x; }

template <>
inline double square_or_norm(std::complex<double> x) { return norm(x); }

然后,在需要它的函数中使用它:

template <typename T>
T computation(T x) {
  return some_code_with(x, square_or_norm(x));
}

关于C++ template double std::complex<double> 范数和积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783010/

相关文章:

swift - struct 中的 swift 类在分配期间是否通过副本传递?

c++ - 如何将模板类的名称传递给模板参数?

c++ - 是否可以禁用p2p并仅在libtorrent中使用HTTPSeed

c++ - 为什么在排序算法的实现中 vector 明显慢于数组?

c++ - HLSL 着色器显示有线颜色

python - 使用 Boost Python 公开带有带有数组参数的构造函数的类

Python 类列表

c++ - 使用 cin ERROR 输入多个 float

visual-studio - VS2013 和 Azure - 部署模板验证失败,尽管我既没有编辑模板也没有编辑项目属性

c++ - 模板:只有在类有方法时才执行