我有以下宏:

#define FOREACH(decl, c) BOOST_FOREACH(decl, std::make_pair((c).begin(), (c).end()))

(我使用此宏,因为我的容器未实现可变的迭代API。)

问题在于,c被评估两次。

我的问题是可以固定此宏,以便:
  • c最多评估一次
  • 为满足第一个条件而创建的任何局部变量都仅位于各自的foreach范围内。
  • 最佳答案

    您可以使用内联帮助函数。

    #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/

    10-11 17:51