假设我正在编写一个表示数学对象的类,定义各种标准操作是有意义的。
通过重载算术运算符,我可以享受这样一个事实:使用它们的任何模板化算法在给出我的课时都会按预期工作。但是如果算法使用类似 std :: pow 的东西怎么办?
该标准似乎表明只允许 std 命名空间中函数的模板特化,这意味着我不能编写自己的 std :: pow 为我的班级。但如果情况确实如此,那么确保通用性的最佳方法是什么呢?
答案 0 :(得分:3)
Yakk的评论是正确的答案。您将pow
放在命名空间中,就像标准将pow
放在std::
中一样。参数依赖查找意味着pow(x,y)
将查看x
和y
类型的名称空间。
有经验的图书馆作者知道如何有效地使用ADL,但TBH我不会立即知道一个有充分理由在未知类型的对象上调用pow
的库。