随分と乗り遅れましたが、 うっそぉ~ん! (そのに) の for each を試してみました。
あまりにも簡単すぎてちょっとビビったのですが、これは楽しいw
で、ポインタに対しても for each 出来ると嬉しいと思ったのでちょっと作ってみました。
template<class T>
class loop_pointer
{
private:
T* first;
T* last;
public:
T* begin() const { return first; }
T* end() const { return last; }
loop_pointer(T* first_, T* last_)
: first(first_), last(last_) { }
};
template<class T, size_t N>
loop_pointer<T> loop(T (&ar)[N]) { return loop_pointer<T>(ar, ar + N); }
template<class T>
loop_pointer<T> loop(T* p, size_t n) { return loop_pointer<T>(p, p + n); }
template<class T>
loop_pointer<T> loop(T* first, T* last) { return loop_pointer<T>(first, last); }
int ar[] = { 1, 3, 5, 2, 0 };
for each (int n in loop(ar))
{
std::cout << n << std::endl;
}
int* par = ar;
for each (int n in loop(par, _countof(ar)))
{
std::cout << n << std::endl;
}
int* last = par + _countof(ar);
for each (int n in loop(par, last))
{
std::cout << n << std::endl;
}
ビバ!for each!
そういえば昔、偉い方々が集まってマクロとかテンプレートで foreach を実装しようとしていたんですよねw
http://www.tietew.jp/cppll/archive/7733
http://www.tietew.jp/cppll/archive/575
http://www.tietew.jp/cppll/archive/8931
http://tricklib.com/cxx/ex/evil_for/
恐ろしいコードばっかりw