自定义和标准类型的数学函数的统一接口

Uniform Interface for Math functions for custom and standard type

本文关键字:函数 接口 标准 类型 自定义      更新时间:2023-10-16

我在namespace aa::Vector了一些自定义类型,为此我定义了一些数学函数a::absa::powa::isnan等。我希望能够调用abs(T t),而不必担心T的论点是double还是a::Vector。在任何地方正确使用abs都可以使用 ADL a::Vector a::abs,但是默认使用 C 样式的 abs(int t) 函数,即使对于double参数,我希望它使用 std::absfabs

我不想使用using std::abs声明,因为这通常被认为是不好的。我有哪些选择可以为所有不同类型的统一界面abs(T t)

如果在 std 中定义了template<class T> abs(T x),那么您可以专门化该模板,但没有用于std::abs的通用模板。向namespace std添加重载是未定义的行为。https://stackoverflow.com/a/14403772

我会推荐using std::abs;using特定功能通常没有错;只有using namespace这很糟糕。