Does MSVC10 Visual Studio 2010 support C++ range based loops

前端 未结 2 899
清酒与你
清酒与你 2020-12-04 01:14

Does MSVC10 support the C++0x draft standard\'s range based loop?

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

Example:

for (i         


        
2条回答
  •  春和景丽
    2020-12-04 02:03

    It doesn't, but you can simulate it with a macro.

    template
    struct false_wrapper
    {
        false_wrapper(const T& value) : value(value) { }
    
        operator bool() const { return false; }
    
        T value;
    };
    
    template
    false_wrapper make_false_wrapper(const T& value)
    {
        return false_wrapper(value);
    }
    
    template
    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
    false_ref_wrapper make_false_ref_wrapper(T& value)
    {
        return false_ref_wrapper(value);
    }
    
    template
    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)
    

提交回复
热议问题