std :: functionのマップを作成しようとしていて、いくつかのパラメータをバインドしようとしていますが、エラーが発生しています。 だから、私のstd ::関数定義はstd :: functionとstd :: mapでstd :: bindを使う方法
using abc = std::function<double(const double& t1, const double& t2)>;
で、マップが
std::map<std::pair<std::string, std::string>, abc> conversion_;
である私は、このマップに挿入しようとしている方法は、私が定義されている
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
conversion_.find(std::make_pair("a", "b"))->second(4); -- Access
です関数の変換を行っていますが、関数にアクセスしようとすると以下のエラーが発生します
error: no match for call to ‘(const std::function<double(const double&, const double&)>) (int)’
完全なコードを追加: 機能は別のファイルに定義されている変換:
namespace x
{
double conversion(const double& a, const double& b);
}
私はマップ
namespace x
{
class main
{
public:
using abc = std::function<double(const double& t1, const double& t2)>;
main();
private:
std::map<std::pair<std::string, std::string>, abc> conversion_;
};
}
を定義しようとしているヘッダファイルCPPファイル
namespace x
{
main::main()
{
conversion_.emplace(
std::make_pair("a", "b"),
std::bind(conversion, 3, std::placeholders::_1));
auto m = conversion_.find(std::make_pair("a", "b"))->second(4);
}
}
それは互換性のオブジェクトを生成していないように見えます。 「変換」の宣言は何ですか? –
投稿**すべて**コードです。そのような重要な細部を省略することはできません。ちょうど正しいと思ってください。 –
投稿する[mcve]。現在、私たちは '変換 'が何であるかを知らない。しかしそれがなくても、あなたの 'abc'は2つのパラメータの関数ですが、あなたはそれを1つだけ呼び出すことになります。それを見てください。 – Angew