這是更多的代碼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次累加? –