2016-05-03 5 views
0

zurückzugeben Ich möchte eine Funktion schreiben, die mir String, Int, Float basierend auf einigen Kriterien zurückgeben würde. Mit C11. Versuchte paar Sachen bereits erwähnt, funktioniert nicht mit Vorlage/Auto. Wenn die Funktion nur eine Rückgabe hat, ist sie im Moment in Ordnung. Wenn ich eine weitere Return-Say-Zeichenfolge hinzufüge, wird der Kompilierungsfehler angezeigt. Fehler: ungültige Umwandlung von int zu char*Funktion, um verschiedene Typen basierend auf Eingabe

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' muss zur Kompilierzeit bekannt sein, von den Informationen in der Signatur der Funktion und seiner Aufrufstelle allein. Und es kann immer nur eine Art sein. – Quentin

+0

Zustimmen, Aufruf an diese Funktion ist wie folgt int l = getProperty (1, root); Char-Name [50]; sprintf (Name, "% s", getProperty (2, Wurzel)); – sach

+0

Oh ja, wie du sagtest, ist die Vorlage Kompilierzeit Sachen. Das würde nicht funktionieren – sach

Antwort

0

Wenn Sie C++ 14 verwenden, ist dieses einfache Beispiel

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; 
} 

natürlich arbeiten müssen Sie den Typ, den Sie abrufen möchten wissen vor dem Anruf, und das ist wahrscheinlich nicht das, was Sie versuchen zu erreichen