这是更多的代码clenliness问题,因为我已经有一个例子在这里。我在代码中做了这么多,所有这些lambda(其中一些都是相同的)的创建已经开始令我烦恼。需要从一个容器的结构中的字段总数
所以给定的结构:
struct foo {
int b() const { return _b; }
int a() const { return _a; }
int r() const { return _r; }
const int _b;
const int _a;
const int _r;
};
我有一个指针,以他们的容器,让我们说vector<foo*> foos
,现在我想通过容器,并得到中的一个字段的总和。
就好像我想要的场_r
一个例子,然后我目前的做法是这样:
accumulate(cbegin(foos), cend(foos), 0, [](const auto init, const auto i) { return init + i->r(); })
我到处写这条线。这可以改进吗?我真的想写这样的东西:
x(cbegin(foos), cend(foos), mem_fn(&foo::r));
我不认为标准提供这样的东西。我明显可以写出来,但是这需要读者找出我怀疑的代码,而不是仅仅知道accumulate
是干什么的。
我没有看到一个问题,提供了一个小工具功能。有时候人们也必须去查找关于标准库中的东西的信息。很少有人知道这一切。只要它是干净的,可访问的,为什么不在标准库中添加一个抽象? – StoryTeller
@StoryTeller现在我也倾向于这一点。这个问题是我去做之前的最后一站,只是觉得应该有更好的方法。 –
您是否考虑过类方法:“static void foo :: acc4(std :: vector foos)”在一次执行中执行所有4次累加? –