Я знаю, что есть и другие подобные вопросы, но они не очень ясны.
Теперь я чувствую, что это глупый вопрос, потому что я уверен, что у меня уже есть ответ, но все же позвольте мне спросить.
Итак, у меня в основном есть функция, которая принимает строку, а затем на основе соответствующего типа переменной преобразует ее следующим образом:
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) { ... }
..и т.д
или я должен использовать специализацию шаблона? Какой из них будет иметь больше смысла? Я склоняюсь к перегрузке функций, потому что у большинства типов будет своя собственная функция преобразования, поэтому, поскольку они немного отличаются, перегрузка функций имеет для меня логический смысл, но я не знаю, упускаю ли я что-то.
Должен ли я придерживаться перегрузки функций? Или переключиться на специализацию шаблона?
std::string
к произвольной типизированной переменной даже с work, а тем более нормально. Но вы, вероятно, можете выполнить то, что хотите, с некоторой помощью strstream. - person WhozCraig   schedule 01.05.2013