C ++ / Boost: Написание более мощной замены sscanf

Я хочу написать функцию на C ++ для замены sscanf языка C, который присваивает совпадения итератору.

По сути, мне нужно что-то вроде:

string s = "0.5 6 hello";
std::vector<boost::any> any_vector;
sscanv(s, "%f %i %s", any_vector);
cout << "float: " << any_cast<float>(any_vector[0]);
cout << "integer: " << any_cast<integer(any_vector[1]);
cout << "string: " << any_cast<string>(any_vector[2]);

Точные детали могут отличаться, но вы поняли идею. Есть идеи по реализации?

Параметры на данный момент вместе с проблемами на данный момент:

  • std :: istringstream : нет манипулятора для сопоставления константных выражений
  • Boost.Regex : не уверен, что это будет работать, и это кажется намного более сложным, чем необходимо для этого
  • Boost.Spirit : не думайте, что это будет работать для динамически генерируемых строк формата, и это также кажется более сложным, чем необходимо
  • sscanf : it будет работать, но нестандартно и т. д. и его использование потребует много накладных расходов, поскольку количество аргументов определяется во время компиляции
7
задан deuberger 17 February 2011 в 22:04
поделиться