У меня есть функция, которая считывает параметры различных типов из файла, и я хотел бы предоставить параметры по умолчанию. Использование простого аргумента функции по умолчанию не является хорошим решением, потому что невозможно отличить функцию от того, был ли задан аргумент или использовался ли по умолчанию. Поэтому я думал, что буду использовать 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
и разобрать второй аргумент правильно. Есть ли способ сделать это красиво?