2014-01-18 39 views
0

是否有可能將原始字符串轉換爲C++中的代碼?如何在C++中使用循環生成代碼?

比如我有一個字符串

string s = "cout << "Hello World";"; 

我希望通過編程生成代碼。也許我想要動態地將該代碼插入程序的各個部分。

cout << "Hello World"; 

此外,是否有可能使用預處理器指令在C++中使用循環生成代碼?

+2

也許我看錯了,但我不相信他在問函數。例如,我想他想要查詢用戶的字符串,讓用戶輸入一些C++代碼,然後運行該代碼。 – JBentley

+0

@JBentley感謝您的澄清。這就是我所問的。所以,我可以將代碼作爲參數傳遞並運行它。可以說,在函數內我檢查傳入的字符串的前幾個字符,如果它符合條件,然後將字符串傳遞給代碼並運行它。 – user3059427

+0

要讓用戶輸入任意代碼然後運行它,通常會使用C++解釋器。我不知道。你可以看看LLVM來編譯代碼並在你的過程中運行它。 –

回答

4

它看起來像你想要的東西類似於由Lisp,Python,Perl和許多其他語言提供的eval函數。

在C++中沒有這樣的功能。它根本不存在,通過設計。

解決此缺失功能的一種方法是讓程序編寫程序,將其存儲在文件中,調用編譯器並調用編譯器生成的可執行文件。這相當醜陋。你做的任何事情都會變得相當醜陋。

2

是否有可能將原始字符串轉換爲C++代碼?

C++通常是一種編譯語言。這使得你正在試圖做一些棘手的事情。爲了實現你所說的話,你需要在運行時解釋代碼(在這種情況下,你最好通過綁定到Python或Lua等腳本語言來實現),或者嵌入或調用C++編譯器並將代碼傳遞給它,然後運行它。

這可能是一個XY problem並且您正在查看的解決方案對於您試圖解決的實際根問題而言過於複雜。這可能是一個想法,以爲什麼你試圖做到這一點,因爲可能有一個更簡單的方法來實現你想要的最終結果。

+0

Downvoter照顧解釋,所以我可以修改我的答案,如果有必要? – JBentley

+2

「C++是一種編譯語言」。 - 請提供證明這句話的標準報價。 – Griwes

+1

我認爲應該刪除「C++是一種編譯語言」,那麼這是一個很好的答案。 –