Я хочу написать одну функцию, которая вернет мне 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;
}
}
}
}
'T' должно быть известно во время компиляции, из информации, доступной в сигнатуре функции и ее сайте вызова. И это может быть только один тип за раз. – Quentin
Согласитесь, вызывается эта функция: int l = getProperty (1, root); имя персонажа [50]; sprintf (имя, «% s», getProperty (2, корень)); –
sach
О, да, как вы сказали, шаблон компилирует время. Это не сработало – sach