テンプレート関数にコールバックを渡そうとしていますが、GCC は私に
error: no matching function for call to ‘Test::iterate(main(int, char**)::<anonymous struct>&)’
なぜこれが機能しないのですか?(また、やむを得ない理由により、C++11 を使用できません。)
また、構造体に名前を付けて egmyvis
を呼び出してみましtest.iterate<myvis>(visitor)
たが、それもうまくいきませんでした。
#include <deque>
#include <iostream>
class Test {
public:
std::deque<int> d;
template <typename C>
void iterate(C& c) {
for(std::deque<int>::iterator itr = d.begin(); itr != d.end(); itr++) {
c(*itr);
}
}
};
int main(int argc, char** argv) {
Test test;
test.d.push_back(1);
test.d.push_back(2);
struct {
void operator()(int x) {
std::cout << x << std::endl;
}
} visitor;
test.iterate(visitor);
}