ネタ元 → うっそぉ~ん!
microsoftのぶっとび独自拡張:「STLコンテナにfor eachできる」件、
気になってごにょごにょ調べてました。
debugモードで実行し、アセンブラ・コードを眺めたところ、
for each ( type item in container ) { ... }
ってなコードを↓に内部的に置き換えてるみたい。
iterator first = container.begin();
iterator last = container.end();
while ( first != last ) {
type item = *first;
…
++first;
}
ならばこいつを逆手に取って、STLコンテナじゃなくても for each できっかもしんね。
ダメ元でやってみた:
#include <iostream>
class loop {
int* array_;
int size_;
public:
int* begin() const { return array_; } // こっから
int* end() const { return array_+size_; } // ここまで
loop(int s) : size_(s) {
array_ = new int[s];
for ( int i = 0 ; i < size_; ++i ) {
array_[i] =i;
}
}
~loop() { delete[] array_; }
};
int main() {
for each ( int item in loop(5) ) {
std::cout << item << std::endl;
}
}
きゃっほー 動きやがんの。
containerがbegin()/end()を持ってて、
そいつらがiterator的なものを返せばなんだっていいみたいだぉ