сегодня мы обнаружили что функторы для умножения и деления, называются std::multiplies
а также std::divides
, в отличие, например, от std::multiply
а также std::divide
соответственно.
Это удивительно, мягко говоря, учитывая, что std::plus
а также std::minus
не сформулированы одинаково.
Есть ли конкретная причина для разницы?
Похоже, это не более чем досадная ошибка: плюс и минус это даже не глаголы …
Название сами по себе не C ++ 14 оригиналы: C ++ 14 просто добавляет <void>
специализация, но типизированная версия и все остальное <functional>
материал заголовка существует из C ++ 98 (и даже до iso), и некоторые соглашения о кодировании (функции как глаголы, объект как вспомогательные интерфейсы как прилагательные …) еще не были хорошо установлены.
Что делает C ++ 14, так это просто добавляет еще одну особенность к существующим определениям, позволяя существующему коду продолжать работать как есть. Он просто не может переопределить имена.
Тем не менее, учтите также, что +
знак не всегда используется во всей стандартной библиотеке для добавлять: в std::string
это конкатенация, и std::plus
, если применяется к строкам, объединяет их. Точно так же * часто используется как операция «замыкания» (подумайте boost::spirit
).
Более правильная библиотека «с нуля» скорее всего будет называть их нейтрально cross
, dash
, star
а также slash
позволяя классам, которые предоставляют соответствующие операции, давать им непротиворечивые имена в их собственном контексте
Других решений пока нет …