2016-05-03 15 views
0

いくつかの基準に基づいてString,IntFloatを返す関数を作成したいと思います。 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; 
     } 
    } 
    } 
} 
+0

'T'はコンパイル時に、関数のシグネチャとそのコールサイトだけで利用可能な情報から知る必要があります。一度に1つのタイプしかできません。 – Quentin

+0

同意すると、この関数の呼び出しは次のようになります int l = getProperty (1、root); char name [50]; sprintf(名前、 "%s"、getProperty (2、root)); – sach

+0

あなたはテンプレートがコンパイル時のものだと言いました。これはうまくいきません – sach

答えて

0

intから無効な変換あなたがC++ 14を使用している場合は、この単純な例では、あなたが取得したいタイプを知っておく必要がありますもちろんの

template <typename T> 
auto test(T a){ 
    return a; 
} 

int main() 
{ 
    int a = 1; 
    std::cout << test(a) << std::endl; 
    double b = 2.0; 
    std::cout << test(b) << std::endl; 
    std::string s {"ss"}; 
    std::cout << test(s) << std::endl; 
} 

動作しません

関連する問題