【发布时间】:2017-11-16 00:29:43
【问题描述】:
我在namespace a 中有一些自定义类型a::Vector,为此我定义了一些数学函数a::abs、a::pow 和a::isnan 等。我希望能够调用abs(T t) 而不必担心参数T 是double 还是a::Vector。在任何地方只使用abs 正确使用a::abs 为a::Vector 使用ADL,但默认使用C 样式abs(int t) 函数,即使是double 参数,而我希望它使用std::abs 或fabs .
我不想使用using std::abs 声明,因为这通常被认为是不好的。我有哪些选择可以为所有不同类型提供统一的界面abs(T t)?
【问题讨论】:
-
嗯,这可能是
using std::abs;可能并非不合理的一个用例。真正糟糕的是使用“using namespace std;”来拉动整个套件和 kaboodle。或者,您也可以定义一个名称相似的模板函数,例如Abs(),然后将其专门用于您的向量,然后将其专用于double,作为真正函数的包装器。 -
这也是我目前唯一想出的答案,但我不确定我是否遗漏了什么。我将等待几天,然后使用 using std::abs 指令,因为我假设没有其他头文件会触及它,因此它应该保持保留。
标签: c++