Sho*_*hoe 15 c++ library-design
今天,我们发现,对于乘除,仿函数被称为std::multiplies和std::divides,而不是,例如, std::multiply和std::divide分别.
至少可以说这是令人惊讶的,考虑到std::plus并且std::minus没有以相同的方式制定.
差异有特殊原因吗?
看起来这只不过是一个错误:加号和减号甚至都不是动词......
这个名称本身并不是C++14 的原始名称:C++14 只是添加了<void>专门化,但类型化版本和所有其他<functional>标头内容都存在于 C++98(甚至 pre-iso)中,并且某些编码约定(功能为动词、宾语作为主语、接口作为形容词……)尚未得到很好的确立。
C++14 所做的只是向现有定义添加一项功能,让现有代码继续按原样工作。它根本无法重新定义名称。
也就是说,还要考虑到该+符号并不总是在整个标准库中用于add:在std::strings 中它是连接,并且std::plus,如果应用于字符串,则连接它们。类似地, * 经常用作“闭包”操作(认为是boost::spirit)。
更合适的“从头开始”库很可能将它们中性地称为cross、dash、star和slash,让提供相应操作的类在自己的上下文中为它们提供一致的名称