假设我正在编写一个表示数学对象的类,为它定义各种标准操作是有意义的。
通过重载算术运算符,我可以享受这样一个事实,即任何使用它们的模板算法在我的类(class)中都能按预期工作。但是,如果算法使用类似 std::pow 的东西怎么办?
标准似乎声明只允许在 std 命名空间中对函数进行模板特化,这意味着我不允许编写自己的 std::pow 我的课。但如果情况确实如此,那么确保通用性的最佳方法是什么?
最佳答案
Yakk 的评论是正确的答案。您将 pow
放入命名空间,就像标准将其 pow
放入 std::
一样。 Argument Dependent Lookup 意味着 pow(x,y)
将在 x
和 y
类型的命名空间中查找。
有经验的库编写者知道如何有效地使用 ADL,但老实说,我不会立即知道有充分理由对未知类型的对象调用 pow
的库。
关于c++ - 为自定义类型重载标准数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369759/