Есть ли причина для того, чтобы std :: multiplies и std :: divides были от третьего лица?

сегодня мы обнаружили что функторы для умножения и деления, называются std::multiplies а также std::divides, в отличие, например, от std::multiply а также std::divide соответственно.

Это удивительно, мягко говоря, учитывая, что std::plus а также std::minus не сформулированы одинаково.

Есть ли конкретная причина для разницы?

15

Решение

Похоже, это не более чем досадная ошибка: плюс и минус это даже не глаголы …

Название сами по себе не C ++ 14 оригиналы: C ++ 14 просто добавляет <void> специализация, но типизированная версия и все остальное <functional> материал заголовка существует из C ++ 98 (и даже до iso), и некоторые соглашения о кодировании (функции как глаголы, объект как вспомогательные интерфейсы как прилагательные …) еще не были хорошо установлены.

Что делает C ++ 14, так это просто добавляет еще одну особенность к существующим определениям, позволяя существующему коду продолжать работать как есть. Он просто не может переопределить имена.

Тем не менее, учтите также, что + знак не всегда используется во всей стандартной библиотеке для добавлять: в std::stringэто конкатенация, и std::plus, если применяется к строкам, объединяет их. Точно так же * часто используется как операция «замыкания» (подумайте boost::spirit).

Более правильная библиотека «с нуля» скорее всего будет называть их нейтрально cross, dash, star а также slashпозволяя классам, которые предоставляют соответствующие операции, давать им непротиворечивые имена в их собственном контексте

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]