Повысить ForEach Вопрос - PullRequest
8 голосов
/ 16 мая 2010

Попытка использовать что-то подобное ниже с массивом char, но он не компилируется. Но пример с short [] работает нормально. Есть идеи почему? :)

char someChars[] = {'s','h','e','r','r','y'};
    BOOST_FOREACH(char& currentChar, someChars)
    {

    }


short array_short[] = { 1, 2, 3 };
    BOOST_FOREACH( short & i, array_short )
    {
        ++i;
    }

1 Ответ

17 голосов
/ 16 мая 2010

Если вы перейдете к строке в <boost/foreach.hpp>, которая вызывает ошибку компиляции, вы увидите следующий комментарий:

// **** READ THIS IF YOUR COMPILE BREAKS HERE ****
//
// There is an ambiguity about how to iterate over arrays of char and wchar_t. 
// Should the last array element be treated as a null terminator to be skipped, or
// is it just like any other element in the array? To fix the problem, you must
// say which behavior you want.
//
// To treat the container as a null-terminated string, merely cast it to a
// char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ...
//
// To treat the container as an array, use boost::as_array() in <boost/range/as_array.hpp>,
// as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ...

Использование boost::as_array(someChars), как показано в комментарии, должно исправить вашу ошибку компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...