GLibの二重リンクリスト構造GListを使用しています。私は、標準マクロがGListを反復するためにあるかどうかを知りたいと思います。私はGLibのドキュメントでそのようなものを見つけることができませんでした。その結果、私は自分のマクロを作ったが、もしあれば、何か標準的なものを使うだろう。GListを反復処理するマクロ
問題を説明するために:それはあまりうるさいです
GList *list;
MyType *item;
GFOREACH(item, list) {
/* do something with item */
}
に減少させることができるマクロで
GList *list, *elem;
MyType *item;
for(elem = list; elem; elem = elem->next) {
item = elem->data;
/* do something with item */
}
:通常私はこのようになります多くのコードを記述します。
注:私は、コールバックが唯一である場合は特に、GLibのリストを反復処理し、各要素のためのコールバックを呼び出すためのforeachの機能を提供しますが、多くの場合、コールバックの間接が読みコードが難しくなりますことに気づきました一度使用。
更新:標準的なマクロがないので見て、私はそれが誰か他の人への使用である場合には、ここで使用していたマクロを入れています。訂正/改善を歓迎します。
GLibは、さまざまなデータ構造を反復処理するforeach関数しか提供していません。私は同意します。コールバックのわかりやすい名前が付いていても、大体は大丈夫ですが、可読性の面で必ずしも優れているとは限りません。 – Cascabel