(Примечание: я знаю о Boost.Format, я ищу лучший способ сделать следующее.)
Первый пример варианта использования: в некоторых странах вы называете человека, называя его / ее фамилию первой и фамилию фамилией, в то время как в других странах это полная противоположность.
Теперь для своего кода я в настоящее время решаю эту проблему с помощью Boost.Format следующим образом:
#include <boost/format.hpp>
#include <iostream>
#include <stdlib.h>
#include <utility>
int main(){
using namespace boost;
int pos1 = 2, pos2 = 1;
char const* surname = "Surname", *forename = "Forename";
// decision on ordering here
bool some_condition = false;
if(some_condition)
std::swap(pos1,pos2);
char buf[64];
sprintf(buf,"Hello %c%d%c %c%d%c",'%',pos1,'%','%',pos2,'%');
// buf == "Hello %[pos1]% %[pos2]%"; with [posN] = value of posN
std::cout << format(buf) % surname % forename;
}
Теперь я бы предпочел, чтобы это было так, то есть все в строке format
:
std::cout << format("Hello %%1%% %%2%%") % pos1 % pos2 % surname % forename;
Но, к сожалению, это не работает, так как я получаю приятное исключение при разборе.
Есть ли какая-либо библиотека для реального позиционного форматирования? Или даже способ добиться этого с Boost.Format, о котором я не знаю?