Boost 1.50.0から、Utility/IdentityTypeというライブラリが入りました。これは、BOOST_FOREACHのような関数マクロに、カンマ入りの引数を渡すためのマクロを提供するライブラリです。
以下は、std::mapをBOOST_FOREACHで走査する例です。
要素の型std::map
#include <iostream> #include <map> #include <boost/foreach.hpp> #include <boost/utility/identity_type.hpp> int main() { std::map<int, char> m = { {1, 'a'}, {2, 'b'}, {3, 'c'} }; BOOST_FOREACH (BOOST_IDENTITY_TYPE((std::map<int, char>::const_reference)) x, m) { std::cout << x.first << ',' << x.second << std::endl; } }
1,a 2,b 3,c
参照:
Boost.Utility/IdentityType 1.0.0