MSVC10 Visual Studio 2010是否支持基于C++范围的循环

问题描述:

MSVC10是否支持C++ 0x草案标准的基于范围的循环?MSVC10 Visual Studio 2010是否支持基于C++范围的循环

http://en.wikipedia.org/wiki/C%2B%2B0x#Range-based_for-loop

例子:

for (int& p : array) { ... } 
+3

MSVC10实施较早的建议,像'每个(INT&P数组)'应该工作 –

+1

看起来这是@BenVoigt提到什么文档:如何:遍历STL集合为每个](http://msdn.microsoft.com/en-us/library/ms177203.aspx)。看起来这最初是为C++/CLR代码设计的,而且它看起来也可能不适用于非CLR数组。 – crashmstr

+0

我认为这for_each(t&t在tt)只会在VS2010编译器中工作? – paulm

号斯蒂芬T. Lavavej的解释功能是在Visual Studio 2010的发布周期改变为时已晚。

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

没有,但你可以用宏模拟。

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) 
+4

不要打扰做得对,请使用[BOOST_FOREACH](http://www.boost.org/doc/libs/1_50_0/doc/html/foreach.html) – eudoxos

+7

@eudoxos:并非每个项目都能提供Boost –