0
我有一定數量的採取typedef
「d數據類型的引用的功能,如下所示:具有默認參數爲在C++通過引用
typedef std::map<string, string> dict;
union ret_t{
int i;
long l;
double d;
};
ret_t func1(char* bytes, dict &d){
//blah blah
}
ret_t func2(char* bytes, dict &d){
//blah blah 2
}
我也有地圖上的處理程序的功能,採用boost::function
所限定如下:
std::map <int, boost::function< ret_t (char*, dict) > > handlers;
我定義這使得與我使用,我可以簡單地讀取鍵,調handlers[key](bytes, d);
,並有我的函數執行> 100處理器功能,僅需要3如果/別人的我不同數據類型(知道d我需要的類型是另一個我不會涉及的問題。這與問題無關)。這按預期工作。
我的問題是,一小部分函數不使用字典,並將在處理程序之外的上下文中有用(例如,準備字節流並將其轉換爲long int的函數) 。爲了調用從上下文這個函數中,我沒有字典預定義的,我要麼必須創建一個從來沒有使用一個無用的字典:
dict d;
func1(bytes, d);
或者我必須pverride功能:
//previous definition
ret_t func1(char* bytes){
//same blah blah as before
}
當我嘗試用默認的參數定義,諸如NULL
或一個空的字典,我得到一個編譯錯誤:
default argument for 'dict& d' has type 'dict {aka std::map<std::basic_string<char>, std::basic_string<char> >}'
有沒有辦法做我想做什麼,沒有爲T o完全重寫我的代碼來傳遞指針而不是引用?
如果你希望它是可選的,指針將是一個選項,就像'boost :: optional'一樣,儘管我不確定它如何與引用一起工作,因爲這是指針的用途。如果你不改變'dict',你可以做'const dict&= {}'。 – chris