У меня проблема с переписыванием цикла:
else if( "d" == option || "debug" == option )
{
debug(debug::always) << "commandline::set_internal_option::setting debug options: "
<< value << ".\n";
string::size_type index = 0;
do
{
const string::size_type previous_index = index+1;
index=value.find( ',', index );
const string item = value.substr(previous_index, index);
debug::type item_enum;
if( !map_value(lib::debug_map, item, item_enum) )
throw lib::commandline_error( "Unknown debug type: " + item, argument_number );
debug(debug::always) << "commandline::set_internal_option::enabling " << item
<< " debug output.\n";
debug(debug::always) << "\n-->s_level=" << debug::s_level << "\n";
debug::s_level = static_cast<debug::type>(debug::s_level ^ item_enum);
debug(debug::always) << "\n-->s_level=" << debug::s_level << "\n";
} while( index != string::npos );
}
value
- это что-то вроде string("commandline,parser")
, и проблема в том, что при первом запуске мне нужно substr(previous_index, index)
, но в каждой последующей итерацииМне нужно substr(previous_index+1, index)
, чтобы пропустить через запятую.Есть ли какой-то простой способ, который я пропускаю, или мне придется повторять вызов find
вне цикла для начальной итерации?