2012-07-21 46 views
0

我想有默認參數的構造方法的static_cast一樣:的static_cast在默認參數值

generate_word_spot(func_double_double_t& cost_f = static_cast<func_double_double_t&>(func_const_t(1))) : 
     cost_f_(cost_f) 
     {}; 

其中

class func_const_t : public func_double_double_t 
{ 
    ... 
    virtual double operator()(double x){ ... }; 
} 

func_double_double_t是許多函數的基類對象與此類似。

GCC對上述構造函數說「無效static_cast」。有沒有辦法實現這樣的行爲?

+0

的靜態成員貌似你試圖綁定臨時爲非const引用。 – chris 2012-07-21 22:19:12

+0

你實際上是否使用'substitution_cost'參數?或者你只是省略了一些代碼? – betabandido 2012-07-21 22:22:07

+0

對不起,我刪除了其他參數並更改了一些名稱。修正。 – 2012-07-21 22:25:16

回答

1

你確定你需要一個非const引用嗎?如果你可以使用const引用,那麼只需做

generate_word_spot(const func_double_double_t& cost_f = func_const_t(1)) : 
    cost_f_(cost_f) 
    {} 

不需要強制轉換。 (定義後都沒有;

否則,對於非const引用的綁定臨時對象是沒有問題的。你需要聲明一個獨立的非暫時性的對象作爲默認參數使用

func_const_t def_const(1); 
... 
class generate_word_spot { 
    ... 
    generate_word_spot(func_double_double_t& cost_f = def_const) : 
    cost_f_(cost_f) 
    {} 
}; 

這是有道理的,使之類

class generate_word_spot { 
    ... 
    static func_const_t def_const; 
    ... 
    generate_word_spot(func_double_double_t& cost_f = def_const) : 
    cost_f_(cost_f) 
    {} 
}; 

func_const_t generate_word_spot::def_const(1);