C++を使った経験はあまりなく、問題に苦しんでいます。以下のコードはスニペットから一種のものです。私はクラスを書いていますし、私はそれが文字列キーと関数値の属性マップを持つようにしたい:ブール関数と単一引数のマップ
std::map< std::string, std::function<bool(std::string)> > selection_filters;
私は、次のようにペアを追加したい:
auto some_func = [] (std::string value) { return value == "some_val"; };
selection_filters["some_key"] = some_func;
//or
selection_filters.insert(std::make_pair("some_key", some_func));
は、このような私ができること:
if (selection_filters["some_key"]("function param") == true) {
//etc..
}
これはコンパイルが、実行時にエラーがスローされます:
terminating with uncaught exception of type std::__1::bad_function_call: std::exception
は、私はそれがマップ定義でstd::function<bool(std::string)>
間の不一致とは何かを持っていることが疑われる、とラムダ関数の使用は[] (std::string value) { ... };
は、私は非常にラムダ関数の使用を維持したいと思いますし、マップ上の添字演算子(map['some_key'](..)
)を介して関数にアクセスする可能性がありますが、C++についての私の知識は解を得るには十分ではありません。 と改善ための提案を提供し、
は、誰かしてくださいポイントタイムアウトエラー私が作ってるんだ(私が勉強したいし、それがスローされる理由)できますか?
地図のアクセスに誤字があるかもしれません。 '[]'を使って関数を検索し、それがマップにない場合は、検索したキーとファンクションの仮引数(nullポインタ?これを試しませんでした)を使って新しいエントリを作成します。ダミー関数を呼び出すと、例外がスローされます。 'map.find()'を使用して、返されたイテレータ '!= map.end()'をチェックして、キーrealyがマップにあるかどうかを確認してください。 – AlexanderS
ありがとう!私はまだ設定されていないキーにアクセスしようとしていました。とてもばか。これで解決しました。 – TBZ92