不使用stringstream将char *转换为任意数字类型

时间:2011-04-04 23:33:17

标签: c++ type-conversion

我希望能够将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;
}

2 个答案:

答案 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);