C ++ / Boost: escrevendo uma substituição mais poderosa do sscanf

Eu quero escrever uma função em C ++ para substituir o sscanf do C que atribui as correspondências ao iterador.

Basicamente, eu quero algo como:

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]);

Os detalhes exatos podem variar, mas você entendeu. Alguma idéia para implementação?

Opções até agora, juntamente com problemas até agora:

std :: istringstream: não há manipulador para corresponder expressões constantesBoost.Regex: não tenho certeza se isso vai funcionar e parece muito mais complicado do que o necessário para issoBoost.Spirit: não pense que isso funcione para cadeias de formato geradas dinamicamente e também parece mais complicado do que necessáriosscanf: funcionaria, mas não é padrão, etc, e usá-lo exigiria muita sobrecarga, pois o número de argumentos é determinado em tempo de compilação

questionAnswers(2)

yourAnswerToTheQuestion