フェールセーフでアクセスする関数を書きたいですstd::map
。
コードの多くの場所でstd::map
キーでアクセスしたいのですが、キーが存在しない場合に備えて、例外ではなく一種のデフォルト値が必要です (これは「何もない」ための多くのコードです)。
このテンプレートベースの関数を書きました
template <typename T1, typename T2>
T2 mapGetByKey(std::map<T1, T2>& map, T1 key, T2 defaultValue={})
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
それはうまくいきます。しかし、std::map<int, const char*>
私は別の振る舞いをしたいと思います。したがって、この専門化を追加できます。
template <typename T1>
const char* mapGetByKey(std::map<T1, const char*>& map, T1 key, const char* defaultValue="")
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
それも機能します。しかし、それはたった1つのケースのための多くのコードだと思います.
""
の呼び出しに対してdefaultValue を設定せずに行を保存する方法を知っている人はいstd::map<int, const char*>
ますか?
コンパイル時に型を区別する方法はありifdef
ますか?