boost:variant を値として使用する汎用マップを作成しようとしています。適切な型を返す get(std::string key) 関数を記述しようとして困っています。
これが私がこれまでに思いついたものです:
class GenericHashMap {
private:
std::map< std::string, boost::variant<int, bool, double, std::string> > genericMap;
public:
template<typename T>
bool getValue(const std::string & key, T & value) {
if ( _map.find(key) == _map.end() ) {
return false;
}
T * valuePtr = boost::get<T>(_map[key]);
if (valuePtr == NULL) {
return false;
}
value = *valuePtr;
return true;
}
}
イテレータをどのように処理すればよいですか? 独自のネストされたイテレータを作成する価値がありますか、それともネストされた std::map を返すだけですか。
編集
達成したいと思っていたクラス設計 (つまり、一般的なハッシュマップ) を追加しました。私が抱えていた問題は、特定のキーが特定のタイプとして格納されているかどうかをユーザーが照会する方法が必要だったことです。