0

例如,我有这个从字符串转换为数字的代码:

#include <sstream>

template <typename T>
T string_to_num( const string &Text, T defValue = T() )
{
    stringstream ss;
    for ( string::const_iterator i=Text.begin(); i!=Text.end(); ++i )
        if ( isdigit(*i) || *i=='e' || *i=='-' || *i=='+' || *i=='.' )
            ss << *i;
    T result;
    return ss >> result ? result : defValue;
}

问题是它需要两个参数,第二个参数为它提供了关于我返回什么类型的数字(int 或 float 等)的线索。

如果字符串包含小数点“。”,我该如何做到这一点?它返回十进制数据类型(例如float),否则返回整个数据类型(例如int)?

除非有人有更好的代码,否则他们可以共享来执行此操作..?

4

1 回答 1

0

问题是你为什么需要这个。我认为您想要它,只是为了在调用之前摆脱指示类型string_to_num

????? number = string_to_num<double>("123.21");
^^^^^
do_something(number);

但是,您已经通过<double>. 一个简单的语法糖,auto就是你想要的。(这是编译时间)

否则,您需要一个变体string_to_num类型,它与您的定义相去甚远。它有很多开销。

您的代码已经可以了,并且输出基于T. 所以,在真正的程序中你没有问题。

于 2013-04-14T06:05:14.200 回答