Ana fark, bir dil yapısıdır, BOOST_FOREACH
ise bu dil yapısına benzeyen bir şey yapmak için kaputun altında çok fazla sihir yapan bir makrodur. Tam olarak C++ 11'in sınırlamaları ile aynı şeyi yapmaya çalışıyor. BOOST_FOREACH
hedefinin aralığıdır.
Orada bile aralık-için yerine BOOST_FOREACH
kullanmanın düşünürdüm biri durum aynen olduğunu ve size tuple göz önüne sermek istediğiniz tüp bir kap üzerinde yineleme edilir: kıyasla
std::map<int, int> m;
int key, value;
BOOST_FOREACH(boost::tie(key, value), m)
{
// do something with key and value here
}
:
int key, value;
for (const auto& pair : m)
{
std::tie(key, value) = pair;
// do something
}
Ben sonuçta o bile bir karar olarak bu dikkate değmez böyle küçük bir avantaj olsa sen, döngü başlığına doğrudan tie
koyabilirsiniz böyle. Aralık için kullanın. Her zaman. hatta o küçük sözdizimsel avantaj kaldırmak structured bindings, tanıtacak
C++ 17: Bu noktada
for (auto const& [key, value] : m)
{
// do something
}
, BOOST_FOREACH
kullanmak hiçbir neden yoktur olacaktır.
Artık yeni kodda "foreach :: foreach" için bir kullanım olduğundan emin değilim. Bence eski kodlarda, daha önce menzilli temel döngüler olmadan önce yararlıdır. –
Bunu mu demek istediniz: BOOST_FOREACH'? – Barry
@Barry Evet, yapıyorum. Bunu düzeltmeme izin ver. –