2012-03-29 7 views
2

Wie kann ich einen boost::format Typ Formatter Objekt mit der Zeichenfolge oder std::string erstellen.
Versuchen, folgenden Code zu verwenden, der nicht ausgeführt wird. Möchten Code entspricht folgenden Code (semantisch) erreichen:boost :: format form c-string oder std :: string

format fobj("first-> %1% , second-> %2%"); 
    std::stringstream s; 
    s<<fobj %1 %"%1%."; //so that I can use s.str() to create a boost object 
// How to create fmt object HERE 
    ss<< fmt %"replacedtext"; 
    cout<<s.str()<<endl; 
    cout<<ss.str(); 

Musterkoffer: "erst-> 1, Zweit->% 1%"
s sollte
, so dass ich diese s.str() - Zeichenfolge verwenden kann, um ein anderes Formatobjekt fmt zu erstellen, an das ich die Substitutionswerte füttern kann.

Irgendwelche Gedanken Leute ??

Antwort

4

Es ist mir nicht klar, was Sie versuchen, die boost::format Dokumente sind ein guter Anfang, es gibt eine Reihe von klaren Beispielen, die zeigen, wie man die Klasse verwendet.

Sie können ein Formatierungsobjekt erstellen und Elemente über verschiedene Operationen einspeisen (anders als z. B. printf, wo alle Parameter die va_arg erfüllen müssen, die Sie übergeben).

boost::format fmter("%2% %1%"); 
fmter % 36; 
fmter % 77; 

Sie können dann eine Zeichenfolge aus dem Ergebnis abrufen.

std::string s = fmter.str(); 

Beachten Sie gibt es eine number of exceptions, die ausgelöst werden kann.

Wenn Sie nach etwas suchen, das dynamisch eine Formatzeichenfolge erstellt, können Sie dies auf verschiedene Arten tun.

std::string strFormatString = "first-> %1% second-> %2%"; 
boost::format formatter(strFormatString.c_str()); 
formatter % value1; 
formatter % strFormatString.c_str(); 
boost::format secondFormatter(formatter.str()); // etc etc etc 
+0

das Ziel ist, genau entgegengesetzt zu dem, was Sie geschrieben haben :) , was Sie geschrieben haben, ist std :: string s = fmter.str(); , die semantisch sagt, die Zeichenfolge aus dem Formatierer erhalten. Was ich symonym meinte, war ein Formatierer von der Saite. Die Zeichenfolge könnte aus dem Formatierer oder etwas anderes stammen – Abhinav

+0

Bearbeitete Antwort :-) – Konrad

+0

Danke @Konrad. Genau das habe ich gesucht. – Abhinav

Verwandte Themen