源文:
c++當然是不能僅僅通過返回值過載函式的,但是,我們往往會想:要是支援返回值過載就好了。現在,我就從c++的某個頗受爭議的角落,為您發掘一點東西。
假設有這樣乙個函式:
type getvalue(const dbfield& fd);
可是,dbfield實際的資料型別對於getvalue來說,並不了解,乙個常見的解決方案是:
template
t getvalue(const dbfield& fd);
可是,這樣當然是乙個辦法,而且是不錯的辦法。問題在於,有些時候我們並不方便提供這個t,比如,是乙個運算子過載的時候。另外,當我們不想過早確定返回值型別的時候,我們也不願意提供這個型別t。解決的辦法很簡單,提供乙個間接層:
string getvalue(const dbfield& fd);
int getvalue_int(const dbfield& fd);
result getvalue(const dbfield& fd)
看看如何實現result:
struct result
operator string() const
operator int() const };
現在,讓我們輸出資料:
void print_string(const string& str)
void print_int(int i)
如下使用:
print_string(getvalue(dbfield));
print_int(getvalue(dbfield));
當然,把型別寫進名字可不是什麼漂亮的做法,既然你喜歡過載,沒問題:
template
t getvalue(const dbfield& fd);
struct result
template
operator t() const };
這個方法問題在於,必須在某個結束點提供具體的型別資訊,這也是為什麼我們要寫兩個print而不是直接用cout輸出的原因。可是,話說回來,既然你打算僅僅通過返回值來過載,總要告訴**,返回值是什麼吧?
這裡展示了懶惰計算的技巧,通過乙個間接層,把真正的計算時刻延遲到必需的時候。也許你對返回值過載不屑一顧,但是這個技巧是非常有用的。下一次,我將用懶惰計算的方法,展示另一種技巧。
#include
#include
using namespace std;
string getvalue_slow(const int&)
string g_fast = "getvalue_fast";
const char* getvalue_fast(const int&)
struct result
operator string() const
operator const char* () const
};result getvalue(const int& i)
void print_const(const char* str)
void print(const string& str)
int main()
構造方法 返回值 過載
在我們使用類的時候會使用乙個特殊的方法叫構造方法,也叫構造器 作用 1.構造方法就是專門建立物件的方法,當我們在new的時候其實呼叫的就是構造方法 public 構造方法名 引數 注意 1.構造方法不能寫返回值 2.構造方法名必須和你當前的類名一模一樣,大小都得寫一樣 構造方法是乙個方法,那麼他可以...
c 引用返回值
函式返回值時,要生成乙個值的副本。而用引用返回值時,不生成值的副本。例如,下面的程式是有關引用返回的4種形式 ch9 6.cpp include float temp float fn1 float r float fn2 float r void main void main 見圖9 9說明。圖9...
C 返回值優化
當函式需要返回物件時,通常有兩種寫法,一種是直接在return語句中返回乙個物件,一種是先構造好乙個物件,然後在return中將其返回。以下 為例 include include using namespace std struct node node const node n name n.nam...