假设我有一个 A 类对象的共享指针向量。我想为所有 A 对象收集方法 A::foo 的所有返回值,并将它们存储在某个容器中,比如另一个向量。这可以用std::transform
orstd::for_each
和std::bind
or 一些boost
功能来完成吗?
class A {
public:
string foo(int p);
};
std::vector<shared_ptr<A>> vec;
假设我有一个 A 类对象的共享指针向量。我想为所有 A 对象收集方法 A::foo 的所有返回值,并将它们存储在某个容器中,比如另一个向量。这可以用std::transform
orstd::for_each
和std::bind
or 一些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));