У меня есть класс Parameter, и я перегрузил конструктор, чтобы он принимал логические или двойные значения. Когда вы даете ему int, он не может построить:
ошибка C2668: 'Parameter::Parameter': неоднозначный вызов перегруженной функции может быть 'Parameter::Parameter(std::string,std::string,double)' или
'Parameter::Parameter(std::string ,std::string,bool)'
Я считаю, что у меня есть два варианта:
- Перегрузка с int по умолчанию
- Явно преобразовать мою переменную в двойную
У меня есть тонна параметров, и некоторые из них имеют длину без знака, числа с плавающей запятой и т. д. (в проекте, который поддерживают несколько человек), поэтому ни одно из них не является идеальным решением. Есть ли способ принудительно выполнить неявное преобразование из int в double? Спасибо.
Код:
#include <string>
#include <unordered_map>
using namespace std;
class Parameter
{
public:
enum eVarType { BOOL, NUMBER};
Parameter() {};
Parameter( string param_name, string param_description, bool dft ) { type_ = BOOL;};
Parameter( string param_name, string param_description, double dft ) { type_ = NUMBER;};
private:
eVarType type_;
};
class ParameterManager
{
public:
template<typename T> void add( string option_name, string description, T value );
private:
std::unordered_map< string, Parameter > parameters;
};
template<typename T> void ParameterManager::add( string param, string description, T value )
{
parameters[param] = Parameter( param, description, value );
};
int main()
{
ParameterManager mgr;
int var = 1;
mgr.add("number","This is an int",var); //Could be double or bool: I want it to be a double
}