2016-10-19 6 views
0

В C++ я хочу получить значение из строки.C++ parse from string using template

Я знаю, что есть функции, как Stoi, КВП, STOF ...

Но я могу написать функцию, которая включает в себя все из них? как использовать шаблон для вывода типа данных?

template<typename T> 
T fromString(const std::string& s){ 
    // do something here 
    // call stoi, stof according to typename T 
} 

string si = "1234"; 
int integer = fromString<int>(si); 
string sf = "1234.1234"; 
float float_point = fromString<float>(sf); 
+0

Да, вы можете это сделать. – mascoj

+0

@JohnnyMopp Он хочет значение из строки, а не строку из значения. – mascoj

+0

@mascoj Ок. Пропустил это ... дух. –

ответ

1

не могу комментировать еще, следовательно, это ...

Не ясно, если вы ищете для одной функции, или шаблонный (перегруженные) функции? Это будет работать: не Have реализации не по умолчанию с возвращением типа Т и специализацией/использованием так:

template<typename T> foo(const std::string& str) {} 
template<> int foo(const std::string& str) {return atoi(str.c_str());} 
template<> double foo(const std::string& str) {return atof(str.c_str());} 
... 
const std::string str1("1234"); const std::string str2("12.34"); 
const auto iVal = foo<int>(str1); 
const auto dVal = foo<double>(str2); 

Обратите внимания на отсутствие специализации в имени функции с помощью функции шаблона специализации, конечно, это выглядит как тип возвращаемого значения.

+0

Реализация по умолчанию, которую вы написали, ничего не возвращает! В противном случае я думаю, что это то, что ищет OP, специализация шаблонов. Это может быть один из немногих случаев, когда вместо перегрузки следует использовать специализированную специализацию. – AndyG

+0

Изначально у меня было чистое объявление функции шаблона, нулевое тело, и оно работало, как ожидалось. Затем я попробовал нулевое тело, чтобы быть уверенным, в MSVC, и был удивлен, что это также работало в MSVC. – NameRakes