使用std :: transform来调用对象的函数

时间:2013-08-15 19:51:21

标签: c++ stl lambda boost-bind

假设我有一个A类对象的共享指针向量。我想收集所有A对象的方法A :: foo的所有返回值,并将它们存储在某个容器中,比如另一个向量。 是否可以使用std::transformstd::for_eachstd::bind或某些boost功能完成此操作?

class A {

  public:
  string foo(int p);

};

std::vector<shared_ptr<A>> vec;

1 个答案:

答案 0 :(得分:4)

std::transform对此很好:

std::vector<std::string> string_vec;
const int magic_number = 42;
std::transform(std::begin(vec),
              std::end(vec),
              std::back_inserter(string_vec),
              [magic_number](std::shared_ptr<A> a){ return a->foo(magic_number); } );

显然,您需要确定要传递给int的{​​{1}}。

在C ++ 03中,您可以用函子或函数替换lambda:

A::foo(int)