2014-01-26 5 views
4

Предположим, что я пишу класс, представляющий математический объект, для которого имеет смысл определять различные стандартные операции.Перегрузка стандартных математических функций для пользовательских типов

Перегружая арифметические операторы, я получаю удовольствие от того, что любой шаблонный алгоритм, использующий их, будет работать, как ожидалось, при задании моего класса. Но что, если в алгоритме используется что-то вроде std :: pow?

стандарт, кажется, утверждать, что только шаблон специализация функций в станде имен разрешена, а это означает, что я не имею право писать свою собственную перегрузку станда :: Pow для моего класса. Но если это действительно так, то какой подход лучше всего подходит для обеспечения родословности?

+1

заставить их использовать вашу 'pow' через adl? – Yakk

ответ

3

Комментарий Якка - правильный ответ. Вы помещаете свой pow в свое пространство имен, точно так же, как стандарт, поставьте его pow в std::. Аргумент зависимого поиска означает, что pow(x,y) будет выглядеть в пространствах имен типов x и y.

Опытные разработчики библиотек умеют эффективно использовать ADL, но TBH Я бы не сразу узнал библиотеку, которая имеет веские основания называть pow объектами неизвестного типа.

Смежные вопросы