看板 C_and_CPP 關於我們 聯絡資訊
用了一個不太高明的方法解決了。 呼叫 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 語言傳參數的方法。 -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.177.130 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1470026853.A.13F.html
PkmX: type safety表示:... 08/02 01:39
soheadsome: 突然想到好像可以用m4寫macro 08/02 15:21