std :: functionのマップを作成してから、いくつかのパラメーターをバインドしようとしていますが、エラーが発生します。だから、私のstd :: functionの定義は
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);
}
}
conversion
として機能してdouble(const double& t1, const double& t2)
いると思います。その場合、std::bind(conversion, 3, std::placeholders::_1)
1つの引数a double
(のもう1つの引数conversion
はとして固定3
)を必要とするファンクターを定義し、を返しdouble
ます。あなただけ変更する必要abc
にstd::function<double(const double& t1)>;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加