SGI

mem_fun1_t<结果、X、参数>

分类:函数对象、适配器 元件类型:类型

描述

Mem_fun1_t是成员函数的适配器。如果X是一些具有成员函数的类结果 X::f(参数)(即,一个成员函数,它取一个类型为参数的参数,并返回一个类型为结果 [1]),则一个mem_fun1_t<结果、X、参数>函数对象 适配器,它使调用f成为可能,就像它是一个普通函数而不是一个成员函数一样。

Mem_fun1_t<结果、X、参数>的构造函数取一个指向之一的指针X的成员函数。然后,像所有函数对象一样,mem_fun1_t有一个operator()它允许mem_fun1_t使用普通函数调用语法调用。在这种情况下,mem_fun1_toperator()取两个参数;第一个的类型为X*第二个的类型为参数.

如果F是一个mem_fun1_t,它构造为使用成员函数X::f,且如果x是一个类型为X*的指针,且a是一个类型为参数的值,则表达式F(x, a)相当于表达式x->f(a)。区别仅仅在于F可以传递给 STL 算法,其参数必须是函数对象。

Mem_fun1_t是成员函数适配器族中的一员。这些适配器在您希望将泛型编程与继承和多态结合时非常有用,因为在 C++ 中,多态涉及通过指针或引用调用成员函数。

与其他许多适配器一样,直接使用mem_fun1_t的构造函数通常不方便。通常,最好使用辅助函数mem_fun [2] 相反。

示例

struct Operation {
  virtual double eval(double) = 0;
};

struct Square : public Operation {
  double eval(double x) { return x * x; }
};

struct Negate : public Operation {
  double eval(double x) { return -x; }
};

int main() {
  vector<Operation*> operations;
  vector<double> operands;

  operations.push_back(new Square);
  operations.push_back(new Square);
  operations.push_back(new Negate);
  operations.push_back(new Negate);
  operations.push_back(new Square);

  operands.push_back(1);
  operands.push_back(2);
  operands.push_back(3);
  operands.push_back(4);
  operands.push_back(5);

  transform(operations.begin(), operations.end(),
            operands.begin(),
            ostream_iterator<double>(cout, "\n"),
            mem_fun(Operation::eval));
}

定义

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

模板参数

参数 描述 默认值
结果 成员函数的返回类型。  
X 成员函数所属的类mem_fun1_t调用。  
参数 成员函数的参数类型。  

的模型

可适配二元函数

类型要求

公共基类

binary_function<X*, 参数、结果>

成员

成员 定义位置 描述
first_argument_type 可适配二元函数 第一个参数的类型X*
second_argument_type 可适配二元函数 第二个参数的类型参数
result_type 可适配二元函数 结果的类型结果
Result operator()(X* x, Arg a) const
二元函数 函数调用运算符。调用x->f(a),其中f是传递给构造函数的成员函数。
explicit mem_fun1_t(Result (X::*f)(Arg))
mem_fun1_t 见下文。
template <class Result, class X, class Arg>
mem_fun1_t<Result, X, Arg>
mem_fun(Result (X::*f)(Arg)); [2]
mem_fun1_t 见下文。

新成员

这些成员未在 可适配二元函数 要求中定义,但特定于mem_fun1_t.
成员 描述
explicit mem_fun1_t(Result (X::*f)(Arg))
构造函数。创建mem_fun1_t,它调用成员函数f.
template <class Result, class X, class Arg>
mem_fun1_t<Result, X, Arg>
mem_fun(Result (X::*f)(Arg)); [2]
如果f类型为Result (X::*)(Arg),则mem_fun(f)mem_fun1_t<Result, X, Arg>(f)相同,但使用更方便。这是一个全局函数,而不是成员函数。

注释

[1] 类型结果允许为void。也就是说,此适配器可以用于不返回值的函数。但这样做存在实现困难。根据 C++ 标准草案,可以通过编写void函数来返回return void而不是仅仅return。但目前(1998 年初),很少有编译器支持该特性。因此,作为替代方案,mem_fun1_t使用部分专门化来支持void成员函数。如果您的编译器尚未实现部分专门化,那么您将无法使用mem_fun1_t以及其返回值类型为void.

的成员函数[2]此帮助器函数在 C++ 标准草案中称为:mem_fun1,但在最终标准中称为:mem_fun。此实现同时提供这两个版本以保持向后兼容性,但mem_fun1将在未来版本中移除。

另请参见

mem_fun_t, mem_fun_ref_t, mem_fun1_ref_t
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 TrademarkInformation