(注意:我知道 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 实现此目的的方法?