重载自定义类型的标准数学函数

Cor*_*rax 5 c++

假设我正在编写一个表示数学对象的类,为此定义各种标准操作是有意义的。

通过重载算术运算符,我可以享受一个事实,即使用给定的类时,使用它们的任何模板化算法都可以按预期工作。但是,如果算法使用类似std :: pow之类的东西怎么办?

该标准似乎声明仅允许std名称空间中的函数的模板专业化,这意味着不允许我为自己的类编写自己的std :: pow重载。但是,如果确实如此,那么确保通用性的最佳方法是什么?

MSa*_*ers 4

Yakk 的评论是正确的答案。您将您放入pow命名空间中,就像标准将其pow放入std::. 参数依赖查找意味着将在和pow(x,y)类型的命名空间中查找。xy

经验丰富的库编写者知道如何有效地使用 ADL,但说实话,我不会立即知道一个库有充分的理由调用pow未知类型的对象。