我發現這個代碼在Wikipedia幫助理解函數對象的工作?
class compare_class {
public:
bool operator()(int A, int B) const {
return A < B;
}
};
...
// Declaration of C++ sorting function.
template <class ComparisonFunctor>
void sort_ints(int* begin_items, int num_items, ComparisonFunctor c);
...
int main() {
int items[] = {4, 3, 1, 2};
compare_class functor;
sort_ints(items, sizeof(items)/sizeof(items[0]), functor);
}
起初我想知道A和B的參數是怎麼傳遞給操作者()(INT A,INT B),當算符,sort_ints被提及,甚至沒有任何括號。
然後我覺得A和B正在傳遞給sort_ints函數中的函數對象。但是,那麼sort_ints的聲明不應該使用'ComparisonFunctor * * * c'而不是'ComparisonFunctor c',因爲它正在接收函數的地址?
在sort_ints函數裏面,函子調用functor會像這樣做嗎?
functor(*begin_items, *(begin_items+1));
這是否意味着sort_ints的第三個參數實際上是通過值來獲取整個對象?如果我們正在處理大型對象,那麼這不會太差嗎? – Nav 2011-01-31 05:55:48