我有一个 Parameter 类,并且我重载了构造函数以接受 bool 或 double。当你给它一个 int 时,它无法构建:
错误 C2668:“Parameter::Parameter”:对重载函数的模糊调用可能是“Parameter::Parameter(std::string,std::string,double)”或
“Parameter::Parameter(std::string,std: :字符串,布尔)'
我相信我有两个选择:
- 使用 int 默认值重载
- 将我的变量显式转换为双精度
我有很多参数,其中一些是 unsigned long、float 等(在一个多人支持的项目中),所以这些都不是完美的解决方案。有没有办法强制从 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
}