【发布时间】:2015-11-22 20:44:41
【问题描述】:
我有一个从文件中读取各种类型参数的函数,我希望能够提供默认参数。使用简单的默认函数参数不是一个好的解决方案,因为无法在函数中区分参数是指定的还是使用了默认值。所以我想我会使用boost::optional。我有一个看起来像
template <typename T>
void func(T& out, boost::optional<T> def_val) {
// do stuff
}
但这在类型推断时失败,例如
double x;
func(x, 3.0); // error: could not match optional against double
func(x, boost::optional<double>(3.0)); // ok but way too verbose
func<double>(x,3.0); // ok and better but still not ideal
令我惊讶的是,我认为第一个 out 参数足以让编译器推断出 T = double 并正确解析第二个参数。有没有办法很好地做到这一点?
【问题讨论】:
标签: c++ boost optional optional-parameters