2012-01-27 69 views
0

對於下面的代碼,如果我沒有東西要返回,應該返回什麼?目前,我做了類似T()的事情,但我不確定這是否正確。如果我沒有東西可以返回未知類型,我應該返回什麼

template<typename T1, typename T2> 
tuple<T1, T2, bool> CBR<T1, T2>::getSomething(T1 t) 
{ 
    // here I I don't have something of time T2 or T2 to return 
    if(...) 
     return make_tuple(T1(), T2(), false); // @FIXME 

    if(...) 
     return make_tuple(something.tp, something.ts, false); 
    else 
     return make_tuple(something.tp, something.ts, true); 
} 
+2

這是[設計問題](http://stackoverflow.com/a/1755380/140719)。如果它不能返回什麼,_supposed_返回的函數是什麼? – sbi 2012-01-27 13:24:36

+0

你知道'boost :: optional'嗎? – fredoverflow 2012-01-27 13:27:40

+0

順便說一句,最後4行應該是'return make_tuple(something.tp,something.ts,!(...));' – MSalters 2012-01-27 13:57:36

回答

2
boost::optional<tuple<T1, T2, bool> > 

「好」 返回路徑將保持不變; 「FIXME」將變成:

return boost::none; 

這可以允許您的類與不支持默認構造的類型一起使用。

+0

對於代碼的FIXME部分,不需要T1和T2,但我想返回false,以便調用此函數的用戶知道他不應該輸出T1和T2(因爲實際上沒有T1和T2) 。 – shn 2012-01-27 14:25:03

+0

如何測試該方法返回了什麼或沒有返回任何東西?我們應該使用如下所示:if(obj.getSomething(t)!= boost :: none)tie(var1,va2,var3)= obj.getSomething(t); – shn 2012-01-28 19:34:29

+0

'if(boost :: optional > result = obj.getSomething(t))tie(var1,var2,var3)= * result;' – 2012-01-30 16:21:02

相關問題