Nav*_*Nav 2 c++ functor function-object
我在维基百科上找到了这段代码
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);
}
Run Code Online (Sandbox Code Playgroud)
起初我想知道如果在sort_ints中提到了仿函数而没有任何括号,那么A和B参数如何传递给operator()(int A,int B).
然后我想到A和B被传递给sort_ints函数内的函数对象.但那么,sort_ints的声明是否应该使用'ComparisonFunctor***c'而不是'ComparisonFunctor c',因为它接收函数的地址?
在sort_ints函数内部,函数调用函数是否会完成这样的操作?
functor(*begin_items, *(begin_items+1));
Run Code Online (Sandbox Code Playgroud)
要理解为什么要按sort_ints值获取其参数,您必须记住,作为比较器传递给它的对象不一定是函数指针.例如,如果您正在使用compare_class函数对象进行比较,那么您传递给函数的是类型的具体对象compare_class.你没有传递地址compare_class::operator(),因为它operator()是一个成员函数,而不是一个自由函数.也就是说,以下代码:
compare_class myComparator;
myComparator(a, b);
Run Code Online (Sandbox Code Playgroud)
翻译成
compare_class myComparator;
myComparator.operator() (a, b);
Run Code Online (Sandbox Code Playgroud)
因此,参数需要通过值而不是指针来接收比较器,因为它需要接收器对象,而不是指向成员函数的指针或指向接收器对象的指针.
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |