2016-04-28 66 views
0

是否可以編寫簡單的C++函數(或其他任何語言),然後將其轉換爲模板元函數(使用某種轉換器工具)。將C++轉換爲模板元程序

例如以下:

int GetGreatest(int a, int b){ 
    if (a > b) 
    return a; 
    return b; 
} 

並將其轉換爲:

template<int a,int b> 
struct GetGreatest{ 
    static int value = a > b ? a : b; 
}; 

是否有C++函數模板元函數轉換器存在,或者我應該勇敢元編程的世界嗎? (是的,我知道我可以使用constexpr,但我想使用模板)

+1

我真的不明白你想要什麼。一個自動將任意C++函數轉換爲編譯時運行的程序? –

+0

@MattiVirkkunen Yup – DarthRubik

+0

「STL元程序」 - 沒有這樣的事情。對於初學者來說,再沒有STL了。不是最長的時間。我們有一個叫做「C++庫」的東西。 –

回答

2

我們不能證明世界上沒有工具可以做到這一點,但要編寫這樣的工具非常困難除了那些非常簡單的代碼之外,它們可以通過IDE中的「代碼片段」輕鬆解決。

如果我們想要構建這樣的工具,我們可以使用Clang(或舊的GCC-XML)來解析運行時C++函數,然後嘗試將其「編譯」爲模板元程序。然而,TMP比科學更具藝術性,編寫這個編譯器將會有相當多的工作,因爲TMP作者使用的所有技巧(一些非常討厭和不明顯)。

+0

老鼠........... – DarthRubik

+1

@DarthRubik:老鼠非常有彈性,多才多藝,甚至聰明的生物。然而,我懷疑甚至一羣老鼠是否能夠將運行時功能可靠地編譯爲編譯時功能。現在,如果你有一百萬只猴子,也許...... –

+0

我想我只需要學習模板元編程的痛苦(儘管僱傭一大批訓練有素的編程猴子聽起來很有用) – DarthRubik