分类:函数对象,适配器 | 组件类型:类型 |
Mem_fun_t<Result, X>的构造函数取X的成员函数之一的指针。然后,同所有函数对象类似,mem_fun_t具有operator(),它允许使用普通的函数调用语法调用mem_fun_t。在这种情况下,mem_fun_t的operator()取X*.
类型的参数。如果F是一个mem_fun_t,它被构造为使用成员函数X::f,并且如果x是一个X*类型的指针,那么表达式F(x)等同于表达式x->f()。不同之处在于F可以传递给参数必须是函数对象的 STL 算法。
Mem_fun_t是一系列成员函数适配器之一。如果你想把通用编程与继承和多态结合,那么这些适配器很有用,因为在 C++ 中,多态涉及通过指针或引用来调用成员函数。
同许多其他适配器类似,直接使用mem_fun_t的构造函数通常不方便。通常最好使用帮助函数mem_fun。
struct B { virtual void print() = 0; }; struct D1 : public B { void print() { cout << "I'm a D1" << endl; } }; struct D2 : public B { void print() { cout << "I'm a D2" << endl; } }; int main() { vector<B*> V; V.push_back(new D1); V.push_back(new D2); V.push_back(new D2); V.push_back(new D1); for_each(V.begin(), V.end(), mem_fun(&B::print)); }
参数 | 描述 | 默认值 |
---|---|---|
Result | 成员函数的返回类型。 | |
X | 其成员函数被mem_fun_t调用的类。 |
成员 | 定义位置 | 描述 |
---|---|---|
argument_type | 可适应单位函数 | 参数类型X* |
result_type | 可适应单位函数 | 结果类型Result |
Result operator()(X* x) const |
Unary Function | 函数调用运算符。调用x->f(),其中f是传递给构造函数的成员函数。 |
explicit mem_fun_t(Result (X::*f)()) |
mem_fun_t | 见下文。 |
template <class Result, class X> mem_fun_t<Result, X> mem_fun(Result (X::*f)()); |
mem_fun_t | 见下文。 |
成员 | 描述 |
---|---|
explicit mem_fun_t(Result (X::*f)()) |
构造函数。创建mem_fun_t调用成员函数f. |
template <class Result, class X> mem_fun_t<Result, X> mem_fun(Result (X::*f)()); |
类型的参数。如果f如果是Result (X::*)类型mem_fun(f)等同于mem_fun_t<Result, X>(f),但更简便。这是一个全局函数,而不是成员函数。 |
[1] 允许的类型Result是void。也就是说,此适配器可以用在不返回任何值函数中。不过,却产生了实现困难。根据 C++ 草案标准,可以通过编写void从一个函数返回return void而不仅仅是returnmem_fun_t。不过,目前(1998 初)很少有编译器支持该特性。为了替代,void使用部分专业化来支持mem_fun_t成员函数。如果您的编译器尚未实现部分专业化,那么将无法使用void.