EDIT3: 2 番目の createTriangle 関数を削除すると、機能します。では、オーバーロードされた関数をバインドするにはどうすればよいでしょうか?
次のように、1 つのパラメーターを持つ関数オブジェクトを受け取る関数があります。
int createObject(std::function<void(int)>);
std::bind でこの関数を呼び出すにはどうすればよいですか? 私はこのように試しました:
createObject(std::bind(&ClassA::createTriangle, std::placeholders::_1, a, b, c, color));
しかし、これは私にエラーを与えます:
候補テンプレートは無視されました: テンプレート引数を推測できませんでした
ClassA::createTriangle は静的関数です。
追加情報:
void ClassA::createTriangle(int id, const glm::vec3 & a, const glm::vec3 & b, const glm::vec3 & c, const glm::vec3 & col) {
/* ... */
}
int ClassB::createTriangle(const glm::vec3 & a, const glm::vec3 & b, const glm::vec3 & c, const glm::vec3 & color) {
return classCInstance.createObject(std::bind(&classA::createTriangle, std::placeholders::_1, a, b, c, color));
}
int ClassC::createObject(std::function<void(int)> f) {
f(++id);
return id;
}
ClassA には別の静的 createTriangle 関数があり、最後のパラメーターが異なります。それは多分問題ですか?bind はどの createTriangle を選択すればよいかわかりませんか? 次のようになります。
void ClassA::createTriangle(int id, const glm::vec3 & a, const glm::vec3 & b, const glm::vec3 & c, const std::initializer_list<glm::vec3> & colors) {
/* ... */
}