1

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

class A {

  public:
  string foo(int p);

};

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

1 回答 1

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要传递给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));
于 2013-08-15T19:54:34.763 回答