[英]Comparison of custom objects and operator overloading in C++
閱讀此有關如何在C ++中的自定義對象進行比較的問題。 我不明白這里使用的運算符重載。 這里的操作員過載了什么? 是嗎 ()? 重載有什么用?
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};
struct less_than_key
{
inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
{
return (struct1.key < struct2.key);
}
};
重點是使用less_than_key
對象作為函數:
less_than_key f;
bool result = f(key1, key2);
其可以被稱為等功能(包括花園各種功能)對象有時被稱為仿函數 (警告:這不是在數學算符的意思),或功能的對象 ,或有時functoid的 。
許多標准庫算法和容器都希望將此類函數對象作為參數。 例如, std::map
可以使用二進制函數對象(與您向我們展示的那個完全一樣)進行自定義,以了解如何對鍵進行排序。
請參閱此初學者的書籍清單,並閱讀有關標准算法和容器的信息,以了解可以在哪里使用這些野獸。
函數對象和迭代器是C ++標准庫的核心,您應該真正了解它們以充分利用C ++。
operator()是一個函數調用運算符,可能最常用的用法是允許您在對象上使用普通的函數調用語法,該語法可以被視為以“類似於函數”的方式運行。
在此示例中,您可以調用STL排序所使用的less_than_key()。
這稱為函子。 這在C ++ API中大量使用。 這些API中有一些采用函子來執行特定於對象的操作。
Example pseudo code:
- Sorting a list of MyStruct objects.
sort api in algorithm.
std::list<MyStruct> mystructlist;
// populate mystructlist
sort(mystructlist.begin(), mystructlist.end(), less_than_key);
它通常稱為“ functor”運算符,它很有用,因為它模仿對常規函數的調用語法。
具有此類重載運算符的對象通常與stl
算法(例如std::find_if()
或std::sort()
。
以下是一些示例:
std::vector<MyStruct> myvector;
less_than_key comparator;
std::sort(myvector.begin(), myvector.end(), comparator);
要么:
MyStruct a, b;
less_than_key comparator;
if (comparator(a, b))
// Do something
else
// Do something else.
如您所見,調用less_than_key
實例的operator()
方法和調用具有相同原型的函數之間沒有語法上的區別(嗯,不考慮隱藏的this
參數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.