我希望能够将char *转换为任意数字类型T. 类似于下面,但没有使用stringstream库,显然 那个人使用我不想使用的字符串类型。
我该怎么做呢?
e.g。
template<class T>
T string_as_T( const string& s )
{
// Convert from a string to a T
// Type T must support >> operator
T t;
std::istringstream ist(s);
ist >> t;
return t;
}
答案 0 :(得分:3)
性状?
template<class T>
char* fmt(T value) { throw new /*some exception, or return null*/; }
char* fmt<int>(int value) { return "%d"; } // forgive rusty specialization syntax
// write fmt<double>, char, float, long, etc
template<class T>
T string_as_T( const char* s )
{
T val;
sscanf(s, fmt(val), &val);
return val;
}
答案 1 :(得分:1)
您可以使用boost.conversion,lexical_cast来实现此目的。
#include "boost/lexical_cast.hpp"
char* string = "15";
int output = 0;
output = boost::lexical_cast<INT_TYPE>(string);