[英]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.