Parameter クラスがあり、bool または double を受け入れるようにコンストラクターをオーバーロードしました。int を指定すると、ビルドに失敗します。
エラー C2668: 'Parameter::Parameter': オーバーロードされた関数へのあいまいな呼び出しは、'Parameter::Parameter(std::string,std::string,double)' または
'Parameter::Parameter(std::string,std: :string,bool)'
次の 2 つのオプションがあると思います。
- int デフォルトでオーバーロードする
- 変数を double に明示的に変換する
私は大量のパラメーターを持っていますが、そのうちのいくつかは 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
}