Boost :: формат формы c-string или std :: string - PullRequest
2 голосов
/ 29 марта 2012

Как мне создать объект форматера типа boost::format, используя строку символов или 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();

Пример:
s должно быть "first-> 1, second->% 1%. "
, чтобы я мог использовать эту строку s.str () для создания другого объекта формата fmt, к которому я мог бы подать значения подстановки.

Любые мысли, люди ??

1 Ответ

4 голосов
/ 29 марта 2012

Мне непонятно, что вы пытаетесь сделать, документы boost :: format - хорошее место для начала, есть ряд наглядных примеров, показывающих, как использовать класс.

Вы можете создавать объект форматирования и вводить элементы с помощью различных операций (в отличие от, скажем, printf, где все параметры должны удовлетворять va_arg, который вы передаете).

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

Вы можетезатем получите строку из результата.

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

Имейте в виду, что существует число исключений , которые могут быть выброшены.

Если вы ищете что-то, что динамическисоздает строку формата, которую вы можете сделать любым количеством способов.

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
...