Re: [问题] 把 vector 传给 printf

楼主: descent (“雄辩是银,沉默是金”)   2016-08-01 12:47:24
用了一个不太高明的方法解决了。
呼叫 unix tool printf 来解决这问题。
将 args 产生成 printf 的指令, 在透过 system 执行。
int main(int argc, char *argv[])
{
vector<string> args;
string fmt = R"("test %d %s\n")";
string p_str = tree_string(fmt);
args.push_back(fmt);
args.push_back("123");
args.push_back("string_test");
string cmd=R"(printf "My name is \"%s\".\nIt's a pleasure to meet you
%d.\n" "John" )";
string cmd_s{"printf "};
for (auto &i : args)
{
cmd_s += i;
cmd_s += " ";
}
cout << "cmd_s: " << cmd_s << endl;
cmd+="25";
system(cmd.c_str());
system(cmd_s.c_str());
return 0;
}
至于为什么要这么做是因为我要 eval printf 这个运算式。
单纯把 parser 的 token 传给 printf 就可以很简单的支援 printf 了。
如下的 c。
int a;
int f2(int i)
{
1+2;
return 2+5+i;
}
int main()
{
int x,y;
int a;
char *p;
p="point strint";
a=99;
printf("a: %d\n", a);
y=2;
x = f2(y+1);
printf("f2(): %d, %s, y=%d, p=%s\n", x, "test_string", y, p);
}
※ 引述《descent (“雄辩是银,沉默是金”)》之铭言:
: 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: linux/g++
: 我有一个 vector<string> args
: 想做到以下功能
: if (args.size() == 2)
: printf(args[0].c_str(), args[1].c_str());
: else if (args.size() == 3)
: printf(args[0].c_str(), stoi(args[1]), args[2].c_str());
: 有一劳永逸的方法吗?
: args[0] 会是 "%d \n" 之类的 format string
: 试了一些方法还是不行。
: 好像只能模拟 c 语言传参数的方法。
作者: PkmX (阿猫)   2016-08-02 01:39:00
type safety表示:...
作者: soheadsome (师大狗鼻哥)   2016-08-02 15:21:00
突然想到好像可以用m4写macro

Links booklink

Contact Us: admin [ a t ] ucptt.com