我想有一个默认参数为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 :(得分: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);