Я знаю, что есть другие вопросы, подобные этому, но они не очень ясны.Шаблон специализации или перегрузки функций
Теперь я чувствую, что это глупый вопрос, потому что я уверен, что у меня уже есть ответ, но позвольте мне спросить в любом случае.
Так что я в основном имеет функцию, которая принимает в строке, а затем на основе соответствующего типа переменного он преобразует его следующим образом:
template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}
так это, кажется, хорошо правильно? Но дело в том, что вы не можете преобразовать строку, чтобы сказать int или float, поэтому мне пришлось бы делать специализированную специализацию для int и float, а для других типов, которые она не может преобразовать, так что я спрашиваю, должен ли я что-то вроде этого:
void ConvertValue(std::string str, int &variable) { variable = atoi(str.c_str()); }
void ConvertValue(std::string str, float &variable) { ... }
void ConvertValue(std::string str, double &variable) { ... }
void ConvertValue(std::string str, std::vector<int> &variable) { ... }
..etc
или я должен использовать шаблон специализации? Какой из них будет иметь больше смысла? Я склоняюсь к перегрузке функций, потому что у большинства типов будет своя собственная функция преобразования, так как они немного отличаются функцией перегрузки, что делает логический смысл для меня, но я не знаю, что я чего-то не хватает.
Должен ли я придерживаться функции перегрузки? Или переключиться на специализированную специализацию?
Я бы не стал статическим литьем по-val 'std :: string' в произвольную типизированную переменную с четным * work *, а тем более -« отлично ». Но вы, вероятно, можете выполнить то, что хотите, с помощью какой-либо помощи. – WhozCraig
Кажется странным. Что бы вы ожидали, если вы скажете, преобразовали строку в список. A? Список с каждой записью один из строк символов? Как это будет обрабатывать созданные пользователем объекты? Кажется, что stringstream должен заботиться о стандартном ints, float и т. Д. Возможно, вам понадобится шаблонная версия контейнера. Но чего вы надеетесь достичь именно здесь? –