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