我正在关注一本书来学习 C++(来自 python 背景)。我写了这个,它有效:class CatalogueItem{ public: CatalogueItem(); CatalogueItem(int item_code, const string &name, const string &description); ~CatalogueItem() {}; bool operator< (const CatalogueItem &other) const; ... private: ...};...list<CatalogueItem> my_list;// this is just me playing aroundCatalogueItem items[2];items[0] = CatalogueItem(4, string("box"), string("it's a box"));items[1] = CatalogueItem(3, string("cat"), string("it's a cat"));my_list.push_back(items[0]);my_list.push_back(items[1]);my_list.sort();我正在尝试的部分是使用运算符 这一切似乎都不错,但是http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Operator_Overloading似乎建议您避免这样做,这正是本书所说的! (“特别是,不要重载 operator== 或 operator我理解“创建相等和比较仿函数类型”的意思是创建比较函数,如下所示:bool my_comparison_function(const CatalogueItem &a, const CatalogueItem &b){ // my comparison code here}那是样式指南所指的吗?有没有人可以选择哪种方法更“正确”?J 最佳答案 仿函数类型将更像这样:struct CatalogueItemLessThan{ bool operator()(const CatalogueItem &a, const CatalogueItem &b) { }};然后用法如下所示:list<CatalogueItem> my_list;// this is just me playing aroundCatalogueItem items[2];items[0] = CatalogueItem(4, string("box"), string("it's a box"));items[1] = CatalogueItem(3, string("cat"), string("it's a cat"));my_list.push_back(items[0]);my_list.push_back(items[1]);my_list.sort(CatalogueItemLessThan());这样做的主要优点是允许您将排序与对象本身分离。现在,您可以根据需要提供多种类型的排序,并在不同的地方使用它们。 (例如,字符串可以按词法顺序排序,或不区分大小写,或“naturally”。与松散函数相比,使用仿函数的优点是您可以将参数传递到比较中以修改仿函数的行为方式。一般来说,谷歌风格指南并不是最好的风格指南(恕我直言,尤其是他们对异常(exception)情况采取异常(exception),但这是另一个讨论)。如果对象具有明显的排序顺序,我通常会添加默认的operator<。如果稍后我想添加额外的排序顺序,那么我会添加松散函数。如果稍后我需要向排序顺序添加参数,那么我将它们变成仿函数。在需要之前增加复杂性是没有意义的。关于C++ 运算符重载,理解谷歌风格指南,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1561183/
10-10 21:23