我有这门课:
template<typename T> class Parser
{
public:
Parser() : count(0) {}
virtual void parse(const string&);
void get_token(void);
private:
T result;
char token;
string expression;
int count;
};
现在如果类不是通用的,如果说result
,一个double
,我会使用这个方法来检测数字。
while((strchr("1234567890.",token))
{
/* add token to a "temp" string */
/* etc. etc. */
}
result = atof(temp.c_str());
但由于 result
是通用的,我不能使用任何方法,如 atof
和 atoi
等。
我该怎么办?
最佳答案
Boost 内置了这个功能:
#include <boost/lexical_cast.hpp>
void Parser<T>::get_token() {
std::string token = ...;
result = boost::lexical_cast<T>(token);
}
根据需要添加异常处理。
或者,也许您出于某种原因不想使用 Boost:
void Parser<T>::get_token() {
std::string token = ...;
std::stringstream ss;
ss << token;
ss >> result;
}
根据需要检查ss
的错误状态。
可以在 this related question 上找到更广泛的答案,尽管它只具体讨论了 int
。
关于c++ - 将字符串转换为数字类型的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8769070/