2012-01-27 13 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

+0

あなたは 'boost :: optional'を知っていますか? – fredoverflow

+0

ところで、最後の4行は、 'return make_tuple(something.tp、something.ts、!(...));' – MSalters

答えて

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

"良い" のリターンパスは変更されません。

return boost::none; 

これにより、デフォルトの構築をサポートしないタイプでクラスを使用できるようになります。

+0

コードのFIXME部分では、T1とT2は必要ありませんが、私はfalseを返すので、これを呼び出すユーザは、例えばT1とT2を書くべきではないことを知っています。 。 – shn

+0

メソッドが何かを返すか、何も返されなかったことをテストすることは可能ですか? if(obj.getSomething(t)!= boost :: none)tie(var1、va2、var3)= obj.getSomething(t); – shn

+0

'if(boost :: optional > result = obj.getSomething(t))tie(var1、var2、var3)= *結果; –

関連する問題