我正在開發一個元編程項目,我們希望能夠將浮點數作爲模板參數傳遞。我不確定這個問題是否會更適合堆棧交換,但我認爲這是一個有點概念,所以選擇了這個網站。如何將浮點數作爲模板參數傳遞?
基本上,我想這樣做:
template <double var>
double fun() { return var; }
int main()
{
double myDoble = fun<1.0>();
return 0;
}
顯然,這無法做到的。此鏈接(http://en.cppreference.com/w/cpp/language/template_parameters)清楚地表明,作爲模板參數傳遞的類型必須是下列之一:
integral type
enumeration
pointer to object or to function
lvalue reference to object or to function
pointer to member object or to member function
std::nullptr_t (since C++11)
然而,事實證明,我可以一個指針的指針傳遞給一個對象(也許是一個struct包含一個double?)讓我懷疑,通過傳遞一個指向這樣的double的方法可能有一種實現上述的方法。
所以,我想這一點:
template <double* pVar>
double fun()
{
return *pVar;
}
int main() {
static const double param = 1.2;
double value = fun<¶m>();
return 0;
}
它提供了以下錯誤:
prog.cpp:9:29: error: ‘& param’ is not a valid template argument of type ‘double*’ because ‘param’ has no linkage
double value = fun<¶m>();
我認爲這個問題可能是因爲我使用的是原始的,所以我嘗試這樣做:
struct D
{
double val;
};
template <D* pD>
double fun()
{
return pD->val;
}
int main() {
static const D d{1.2};
double value = fun<&d>();
return 0;
}
它給出了相同的錯誤。
有沒有人有解決這個問題的其他想法?如果人們能夠避免「不能做到」的答案,我將不勝感激;我知道這是無法完成的,無論如何我都想做! ;)
使它成爲一個全球性的。 PS:你可以使用引用而不是指針。 –
@ThomasEding我無法讓它工作; http://ideone.com/LGDv1j – arman
你爲什麼需要它?爲什麼它必須在編譯時完成(即使用模板)?也許這是一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –