MW_*_*dev 28

Stephan T. Lavavej解释说,在Visual Studio 2010的发布周期中,该功能发生了太晚改变.

关于Visual Studio Team博客的评论:http://blogs.msdn.com/b/vcblog/archive/2009/07/13/intellisense-and-browsing-with-c-0x.aspx


Val*_*lea 6

它没有,但你可以用宏来模拟它.

template<typename T>
struct false_wrapper
{
    false_wrapper(const T& value) : value(value) { }

    operator bool() const { return false; }

    T value;
};

template<typename T>
false_wrapper<T> make_false_wrapper(const T& value)
{
    return false_wrapper<T>(value);
}

template<typename T>
struct false_ref_wrapper
{
    false_ref_wrapper(T& value) : value(value) { }

    operator bool() const { return false; }

    T& value;

private:
    false_ref_wrapper& operator=(const false_ref_wrapper&);
};

template<typename T>
false_ref_wrapper<T> make_false_ref_wrapper(T& value)
{
    return false_ref_wrapper<T>(value);
}

template<typename T>
void increment(T& it)
{
    ++it;
}

#define foreach_(VAL, VALS) \
    if (auto _foreach_col = make_false_ref_wrapper(VALS)) { } else \
    if (auto _foreach_cur = make_false_wrapper(std::begin(_foreach_col.value))) { } else \
    if (auto _foreach_end = make_false_wrapper(std::end(_foreach_col.value))) { } else \
    for (bool _foreach_flag = true; \
              _foreach_flag && _foreach_cur.value != _foreach_end.value; \
              _foreach_flag ? increment(_foreach_cur.value) : (void) 0) \
        if ((_foreach_flag = false) == true) { } else \
        for (VAL = *_foreach_cur.value; !_foreach_flag; _foreach_flag = true)
Run Code Online (Sandbox Code Playgroud)

  • @eudoxos:并非每个项目都能买得起Boost (8认同)
  • 不要麻烦做得对,使用[BOOST_FOREACH](http://www.boost.org/doc/libs/1_50_0/doc/html/foreach.html) (4认同)