SGI

mem_fun_t<Result, X>

分类:函数对象,适配器 组件类型:类型

描述

Mem_fun_t是成员函数的适配器。如果X是一个具有成员函数的类Result X::f()(即,一个不带参数且返回Result 类型的成员函数[1]),那么mem_fun_t<Result, X>是一个函数对象适配器,它使调用f()成为可能,如同调用一个普通函数而不是成员函数。

Mem_fun_t<Result, X>的构造函数取X的成员函数之一的指针。然后,同所有函数对象类似,mem_fun_t具有operator(),它允许使用普通的函数调用语法调用mem_fun_t。在这种情况下,mem_fun_toperator()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));
}

定义

在标准头文件 functional 中定义,以及在非标准后向兼容头文件 function.h 中定义。

模板参数

参数 描述 默认值
Result 成员函数的返回类型。  
X 其成员函数被mem_fun_t调用的类。  

模型

可适应单位函数

类型要求

Public 基类

unary_function<X*, Result>

成员

成员 定义位置 描述
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 见下文。

新成员

这些成员未在Adaptable Unary Function要求中定义,但对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] 允许的类型Resultvoid。也就是说,此适配器可以用在不返回任何值函数中。不过,却产生了实现困难。根据 C++ 草案标准,可以通过编写void从一个函数返回return void而不仅仅是returnmem_fun_t。不过,目前(1998 初)很少有编译器支持该特性。为了替代,void使用部分专业化来支持mem_fun_t成员函数。如果您的编译器尚未实现部分专业化,那么将无法使用void.

和返回类型为

的成员函数。另参见, mem_fun_ref_t, mem_fun1_t
[Silicon Surf] [STL Home]
mem_fun1_ref_t 版权所有 ©1999 Silicon Graphics, Inc.,保留所有权利。