2016-05-03 8 views
0

Я хочу написать одну функцию, которая вернет мне String, Int, Float, основанный на некоторых критериях. Использование C11. Пробовал пару вещей, о которых уже упоминалось, не работает с шаблоном/авто. Если функция имеет только одно возвращение, то в данный момент ее штраф. Когда я добавляю другую строку return say, ошибку компиляции. Ошибка: неправильное преобразование из int в 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' должно быть известно во время компиляции, из информации, доступной в сигнатуре функции и ее сайте вызова. И это может быть только один тип за раз. – Quentin

+0

Согласитесь, вызывается эта функция: int l = getProperty (1, root); имя персонажа [50]; sprintf (имя, «% s», getProperty (2, корень)); – sach

+0

О, да, как вы сказали, шаблон компилирует время. Это не сработало – sach

ответ

0

Если вы используете 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; 
} 

, конечно, нужно будет знать тип, который вы хотите получить перед вызовом, и это, вероятно, не то, что вы пытаетесь достичь.