(注: 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 でこれを達成する方法さえありますか?