Почему вы даже используете шаблон, если собираетесь сделать оператор switch для группы операторов if для каждого типа?Ваш экземпляр шаблона никогда не скомпилируется, если вы хотите рассматривать каждый тип как несколько типов.Этот дизайн несовершенен, но если вам необходимо, вы можете использовать специализации для достижения чего-то похожего.
template<class T> void jsonParse(json_object* jobj, eParseWhat parseWhat, T &value) {
static_assert(false); // not a handled type
}
template<> void jsonParse(json_object* jobj, eParseWhat parseWhat, int &value) {
value = json_object_getInt(val);
}
template<> void jsonParse(json_object* jobj, eParseWhat parseWhat, std::string &value) {
value = json_object_getString(val);
}
Как указывает GMan, обычно предпочтительнее перегружать функции, чем специализировать шаблон функции.Эквивалент с использованием перегруженной функции будет выглядеть примерно так:
void jsonParse(json_object* jobj, eParseWhat parseWhat, int &value) {
value = json_object_getInt(val);
}
void jsonParse(json_object* jobj, eParseWhat parseWhat, std::string &value) {
value = json_object_getString(val);
}