Рассмотрим следующее:Специализация функции для определенного типа шаблона
template <typename TResult> inline TResult _from_string(const string& str);
template <> inline unsigned long long _from_string<unsigned long long>(const string& str) {
return stoull(str);
}
я могу вызвать функцию как таковую:
auto x = _from_string<unsigned long long>("12345");
Теперь я хотел бы написать еще одну специализацию vector
с, т.е. :
template <typename T> inline vector<T> _from_string<vector<T>>(const string& str) {
// stuff that should be done only if the template parameter if a vector of something
}
так, что я могу сделать что-то вроде этого:
auto x = _from_string<vector<int>>("{1,2,3,4,5}");
Однако при компиляции функции (под MSVC 2015), я получаю C2768 ошибки: «незаконное использование аргументов явного шаблона», что делает какой-то смысл, как я не должен быть с новыми аргументами шаблона в специализации ,
Как переписать специализацию vector
так, чтобы она работала?
Herb Sutter обязательно должен прочитать [эту статью] (http://www.gotw.ca/publications/mill17.htm). – Rakete1111