0
我有一個函數從文件中讀取各種類型的參數,我希望能夠提供默認參數。使用一個簡單的默認函數參數並不是一個好的解決方案,因爲不可能在函數中區分參數是否被指定或者是否使用了默認值。所以我想我會用boost::optional
。我有一個類似使用boost ::可選參數作爲模板函數中的參數
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
和正確解析第二個參數。有什麼辦法可以很好地做到這一點?