c++ - 将字符串转换为数字类型的通用方法?

标签 c++ string generics types casting

我有这门课:

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 是通用的,我不能使用任何方法,如 atofatoi 等。

我该怎么办?

最佳答案

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/

相关文章:

c++ - 非常大的A分界线在非常大的B处

c++ - 如何在我的 C++ 源代码中查找(并替换)所有旧的 C 样式数据类型转换?

c++ - Boost 文件系统存在访问冲突

javascript - 修改键值对Javascript中的字符串

c++ - 带有 SDL2 的 OpenGL 没有返回正确的版本

java - 创建大型静态资源文件是否存在问题?

bash - 如何在 bash shell 中将一个字符串拆分为至少由一个空格分隔的多个字符串?

java - 如何使用同一个 Java 类来执行不同的 SQL 查询

java - 继承层次结构对泛型的限制是什么?

java - 实现通用接口(interface)