我認爲我的問題是,是否有模仿我們將從C++ 0x的constexpr
關鍵字獲得的行爲以及當前的C++標準(也就是說,如果我理解constexpr
應該是假設的做正確的)。在const表達式中重用函數邏輯
更清楚的是,在編譯時有時計算一個值是有用的,但是它也可以在運行時對它進行計算,例如,如果我們想計算權力,我們可以使用下面的代碼。
template<int X, unsigned int Y>
struct xPowerY_const {
static const int value = X*xPowerY_const<X,Y-1>::value;
};
template<int X>
struct xPowerY_const<X, 1> {
static const int value = X;
};
int xPowerY(int x, unsigned int y) {
return (y==1) ? x : x*xPowerY(x,y-1);
}
這是一個簡單的例子,但在更復雜的情況是能夠重複使用的代碼將是有益的。即使對於運行時性能而言,函數的遞歸性質並不理想並且可以設計出更好的算法,但是如果模板化版本可以在函數中表達,那麼測試邏輯將是有用的,因爲我看不到合理的方法在很多情況下測試常量模板方法的有效性(雖然也許有一個,我只是看不到它,也許這是另一個問題)。
謝謝。
編輯 忘了提,我不想#define
EDIT2也高於我的代碼是錯誤的,它不隨x^0交易,但是這並不影響題。
爲什麼'constexpr'函數被添加到語言中的原因正是爲了能夠做到這一點。 – 2010-06-29 17:57:46
@Pavel,是的,這是有道理的 - 確實認爲我發佈時,爲什麼他們會添加它,如果它已經可以完成,但我想我會嘗試,以防萬一 – tjm 2010-06-29 18:05:36