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

using std::transform for calling object's function

本文关键字:函数 对象 transform std 使用 调用      更新时间:2023-10-16

假设我有一个a类对象的共享指针向量。我想收集所有a对象的方法a::foo的所有返回值,并将它们存储在某个容器中,比如另一个向量。这可以用std::transformstd::for_eachstd::bind或一些boost函数来完成吗?

class A {
  public:
  string foo(int p);
};
std::vector<shared_ptr<A>> vec;

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传递给A::foo(int)

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

struct get_foo
{
  get_foo(int n) : n_(n) {}
  bool operator() (std::shared_ptr<A> a) const { return a->foo(n); }
private:
  int n_;
};
const int magic_number = 42;
std::vector<std::string> string_vec;
std::transform(std::begin(vec),
              std::end(vec),
              std::back_inserter(string_vec),
              get_foo(magic_number));