2012-09-03 64 views
3

我想知道在C++模板元編程的世界中是否有方法/技術,我可以用硬編碼浮點係數替代。爲了更清楚,我會盡力舉一個例子:模板元編程和浮點常數係數

考慮,我想打,解決了線性方程組的方法:

y = a * x + b 

的一種方式是提供axb作爲參數運行。這我想避免。不過考慮,我知道ab然後我可以寫這樣的:

double linear(double x) { 
    return 2.0 * x + 3.0; 
} 

所以我知道a = 2.0b= 3.0。我想要做的是從模板中提取ab,所以它們在編譯時就像硬編碼一樣。一個示例方法可以看起來像(這是我想寫在我的代碼中):

template <class coefs> 
double linear(double x) { 
    return coefs::a * x + coefs::b; 
} 

這是可能以某種方式?不知道我的問題是否足夠清楚,所以讓我知道我是否需要改述。

+3

這當然是[可能](http://ideone.com/7jZVn)。有什麼特別的東西不適合你嗎? –

+0

什麼不工作? –

+0

我猜測OP是困惑的,因爲當你做一個模板,你不能有模板嬰兒車是一個浮動。從某種意義上講,你可以有,但你不能有。 Ofc可以實例化T爲浮點數,U爲雙精度值。 – NoSenseEtAl

回答

3

由於floatdouble類型不能是模板參數,所以不能通過模板參數設置係數,但可以簡單地對這些值進行硬編碼。

舉例來說,這是不行的:

template<float a_in, float b_in> 
struct coeff 
{ 
    static const float a = a_in; 
    static const float b = b_in; 
}; 

linear<coeff<2.0, 3.0>>(4.0); 

但這會:

struct coeff 
{ 
    static const float a = 2.0; 
    static const float b = 3.0; 
}; 

linear<coeff>(4.0); 
+0

只需要清楚,一旦定義了coeff,就可以將其用作線性模板函數的模板參數。 – Nathan

+1

@Jason你不能在'C++ 03'和'C++ 11'中初始化'static const float'成員,使用'constexpr'是個好主意。 – user1095108