C++
x
35
1
2
3
4
template <typename a>5
void ForEach(const a&, ...) {}6
7
template <typename IteratorType>8
using ItemType = typename std::iterator_traits<typename IteratorType::iterator>::value_type;9
10
template <typename IteratorType>11
IteratorType Filter(IteratorType &items, std::function<bool(ItemType<IteratorType> &item)> filterCb)12
{13
IteratorType filteredIterator;14
ForEach<IteratorType>(items, [&filteredIterator, &filterCb](auto &item) { if (filterCb(item)) filteredIterator.push_back(item); });15
return filteredIterator;16
}17
class HogeTest {18
public:19
HogeTest(int id){this->id = id;}20
~HogeTest(){}21
int hoge = 42;22
private:23
int id;24
};25
int main() {26
std::vector<HogeTest> vec;27
vec.push_back(HogeTest(3));28
vec.push_back(HogeTest(4));29
vec.push_back(HogeTest(5));30
vec.push_back(HogeTest(6));31
32
// エラー。記述が正しくないです33
Filter(vec, [](HogeTest &item){return item.hoge > 0;});34
}35
$ g++ prog.cc -Wall -Wextra -std=c++14 -pedantic-errors
Start
0
Finish