簡體   English   中英

如何根據內部代碼更改返回類型? (字符串到數字的轉換)

[英]How to change return type based on inner code? (string to number conversion)

例如,我有這段代碼將字符串轉換為數字:

#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)?

除非有人擁有更好的代碼,否則他們可以共享以執行此操作。

問題是為什么需要這個。 我認為您想要它,只是在調用string_to_num之前擺脫指示類型:

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

但是,您已經通過<double>指示了類型。 一個簡單的語法糖, auto是您想要的。 (現在是編譯時間)

否則,您需要一個變體類型,並且它與您的string_to_num定義string_to_num 它有很多開銷。

您的代碼已經確定,並且輸出基於T 因此,在實際程序中,您沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM