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