0
いくつかの基準に基づいてString
,Int
、Float
を返す関数を作成したいと思います。 C11を使用します。既に言及したものの試したカップルは、テンプレート/自動で動作しません。関数に1つのリターンしかない場合、その時点で問題はありません。私は別のリターンの文字列を追加すると、コンパイルエラー。エラー:char*
入力に基づいて異なるタイプを返す関数
template<typename T>
T getProperty(int field,Json::Value root)
{
for(int i =0;i < root["properties"].size(); i++)
{
if(root["properties"][i]["field"].asInt() == field)
{
if(strcmp(root["properties"][i]["type"].asString().c_str(),"int") == 0)
{
T convertedValue = (root["properties"][i]["currVal"].asInt());
return convertedValue;
}
if(strcmp(root["properties"][i]["type"].asString().c_str(),"string") == 0)
{
T convertedValue;
sprintf(convertedValue,"%s",root["properties"][i]["currVal"].asString().c_str());
return convertedValue;
}
}
}
}
'T'はコンパイル時に、関数のシグネチャとそのコールサイトだけで利用可能な情報から知る必要があります。一度に1つのタイプしかできません。 – Quentin
同意すると、この関数の呼び出しは次のようになります int l = getProperty(1、root); char name [50]; sprintf(名前、 "%s"、getProperty (2、root)); –
sach
あなたはテンプレートがコンパイル時のものだと言いました。これはうまくいきません – sach