2017-03-28 7 views
0

このテンプレート関数でエラーを処理するための良い解決策を見つけることができません。テンプレートメソッドのエラー処理

template<typename K, typename V> 
const V& DirectHashmap<K, V>::lookup(K key) const 
{ 
    int pos = position(key); 

    return _values.get(pos)->value; 
} 

返信するタイプがわからないため、エラーコードを返すことはできません。例外を使用しないことを前提としています。これは、以前はプロジェクトで例外を使用していなかったためです。これが例外を持つ唯一のメソッドだった場合は、一貫性がありません。

誰かが良い解決策を持っている場合は、私に知らせてください!すべてのフィードバックは非常に高く評価されています。

+2

'std :: pair '? –

+0

'オプションの'を返しますか? – AndyG

+0

は返されたブールisFoundであり、参照によって第2パラメータV&を受け入れ、それを発見されたオブジェクトで更新することができるか? –

答えて

3

代わりにconst_iteratorをコレクションに返す必要があります。

エンドユーザーは、コレクションに.end()と同等かどうかをテストできます。これは、STLのコンテナが通常動作する方法です。私たちは今、あなたがクライアントコードは、サンプルコードのように種類のエラーを定義してみましょうするために使用できるテンプレート変数を持つC++ 14で始まる

0

map::findunordered_map::find、およびunordered_set::findを参照してください)。実際には、それらをグローバルにすることはできませんが、テンプレート関数が知っているクライアントが開くことができる名前空間があります。

#include <iostream> 

template<typename T> 
T error; 

template<> 
int error<int> = -1; 

int main(int argc, char* argv[]) 
{ 
    std::cout << error<int> << std::endl; 
    return 0; 
}