我有以下宏:
#define FOREACH(decl, c) BOOST_FOREACH(decl, std::make_pair((c).begin(), (c).end()))
(我使用此宏,因为我的容器未实现可变的迭代API。)
问题在于,
c
被评估两次。我的问题是可以固定此宏,以便:
c
最多评估一次最佳答案
您可以使用内联帮助函数。
#define FOREACH(decl, c) BOOST_FOREACH(decl, pair_helper(c))
template <typename T>
inline std::pair<typename T::iterator, typename T::iterator> pair_helper (T c) {
return std::make_pair(c.begin(), c.end());
}
关于c++ - 安全地重新定义BOOST_FOREACH宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8858750/