Возможно, еще один тупой вопрос, который возник в результате моего изучения плохой книги по С ++ (я собираюсь исправить это).
Я играл с sstream и попробовал следующую функцию:
template <class num> num fromString(const std::string& str) {
std::istringstream ss(str);
num temp;
ss >> temp;
return temp;
}
Когда я называю это как:
int i = fromString<int>("123");
, все работает нормально.Но если я назову это так:
int i = fromString("123");
Я получил ошибку компиляции:
error: no matching function for call to ‘fromString(std::string&)’
Я думал, что компилятор поймет, что если я присваиваю значение int
тогда я должен говорить о fromString<int>
, но, похоже, дело не в этом.
Я что-то упустил?Должен ли я всегда указывать тип шаблонной функции?Или только когда тип шаблона является типом возврата?Или просто, когда тип шаблона не может быть определен типами входов?