evil_for は STL のコンテナ及び同等のインターフェイスを持つコンテナに対するループ処理を簡略化された記述で実現する為のギミックです。
const や reverse に対応してないのはやっぱり不便なので対応させますた。
...特定の処理系でなにか問題が発生するようなことなどがあれば 道化師 までメールにてお伝えくださいまし。
下のリンクから evil_for.h をダウンロードして、evil_for を使用したいモジュール内で evil_for.h をインクルードするだけです。
■基本 #include "evil_for.h" void f() { std::vectorhoge; ... evil_for(hoge) { std::cout << *evil_i(hoge) << std::endl; } } ■ネスト #include "evil_for.h" void f() { std::vector hoge; std::list mage; ... evil_for(hoge) { evil_for(mage) { std::cout << (*evil_i(hoge)) *(*evil_i(mage)) << std::endl; } } } ■逆方向ループ #include "evil_for.h" void f() { std::vector hoge; ... evil_rfor(hoge) { std::cout << *evil_ri(hoge) << std::endl; } } ■同一コンテナによるネスト #include "evil_for.h" void f() { std::vector hoge; std::vector &mage = hoge; ... evil_for(hoge) { evil_for(mage) { std::cout << (*evil_i(hoge)) *(*evil_i(mage)) << std::endl; } } }
| マクロ名 | 種別 | 説明 |
|---|---|---|
| __EVIL_FOR_H__ | 自動定義 | evil_for.h の重複インクルード対策の為に使用されています。 |
| __WITH_EVIL_FOR__ | evil_for が組み込まれていることを示す為に使用されます。 | |
| __ADJUST_ALIGNMENT__ | 無駄の無いアライメントアジャスタを実装したので、このマクロは廃止しました。アジャスタは常に実装されます。 | |
| __STRICT_ALIGNMENT__ | まず発生しないとは思いますが、アライメントの問題が発生する場合はこのマクロを指定して問題を回避してください。このマクロを指定するとパフォーマンスに影響します。...尚、詳細な情報を 道化師 までご提供頂ければこのマクロを指定せずとも問題が解消するように evil_for.h を修正させて頂きます。 | |
| evil_for_ex | コード | ループ処理を実現します。evil_for より、ループに関して多くのこと指定できますが、あまり役に立つことはないと思われます。evil_for はこの evil_for_ex を利用して実装されています。 |
| evil_for | コード | ループ処理を実現します。evil_i とセットで使用してください。 |
| evil_i | コード | evil_for 及び evil_for_ex のループ内で、iterator を取得するのに利用します。 |
| evil_rfor_ex | コード | ループ処理を実現します。evil_rfor より、ループに関して多くのこと指定できますが、あまり役に立つことはないと思われます。evil_rfor はこの evil_rfor_ex を利用して実装されています。 |
| evil_rfor | コード | ループ処理を実現します。evil_ri とセットで使用してください。 |
| evil_ri | コード | evil_rfor 及び evil_rfor_ex のループ内で、iterator を取得するのに利用します。 |
今現在はFAQを用意していません。evil_for でよくわからないことがありましたら 道化師 までメールください。
環境及び処理系( CPU/OS/コンパイラ )の影響を強く受けるアライメントアジャスタまわりの実装に関する問題があった場合は可能な限り対処いたしますので特にフィードバックをよろしくお願いいたします。