C++: как использовать %i в функции?

У меня небольшой вопрос, можно ли использовать %i в функции? Вот что мне нужно сделать. У меня есть обратный вызов функции:

engine.gui->menu.addItem(Menu::AGILITY,"Agility (+1 defense)");

и я хочу использовать его таким образом:

engine.gui->menu.addItem(Menu::AGILITY,"Agility (%i defense)",engine.level);

Как мне это реализовать, или это может быть даже невозможно? Я изо всех сил пытался что-то сделать, но у меня ничего не получалось. :( Причина, по которой я хочу сделать это, заключается в том, что тогда игрок мстит на следующий уровень, количество подсчетов engine.level получает ++, поэтому при повышении уровня игрока он может получить больше Ловкости на разных уровнях, а затем, повышая уровень, он может быть проинформирован, сколько ловкость он мог получить.


person TheScriptan    schedule 07.08.2013    source источник
comment
Вы можете обернуть vsnprintf, но это не совсем тривиально, так как где-то вам нужна память для временной строки.   -  person Kerrek SB    schedule 07.08.2013


Ответы (2)


Если у вас С++ 11, вы можете сделать:

engine.gui->menu.addItem(
        Menu::AGILITY,
        "Agility (" + std::to_string( engine.level ) + " defense)" );

Если у вас нет C++11, у вас должен быть эквивалент std::to_string в вашем наборе инструментов. Что-то вроде:

template <typename T>
std::string
toString( T const& obj )
{
    std::ostringstream result;
    result << obj;
    return result.str();
}
person James Kanze    schedule 07.08.2013

Скорее всего boost::format (http://www.boost.org/doc/libs/1_54_0/libs/format/) должен делать то, что вы хотите. Это будет не тот синтаксис, но он должен быть близок.

person Mark B    schedule 07.08.2013