EDIT3: If I delete the second createTriangle function, it works. So how can I bind overloaded functions?
I have a function which takes a function object with one parameter, like this:
int createObject(std::function<void(int)>);
How can I call this function with std::bind? I tried it like this:
createObject(std::bind(&ClassA::createTriangle, std::placeholders::_1, a, b, c, color));
But this gives me an error:
candidate template ignored: couldn't infer template argument
ClassA::createTriangle is a static function.
Additional info:
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;
}
There is another static createTriangle function in ClassA, with a different last parameter. Is that maybe a problem? Does bind not know which createTriangle to choose? It looks like this:
void ClassA::createTriangle(int id, const glm::vec3 & a, const glm::vec3 & b, const glm::vec3 & c, const std::initializer_list<glm::vec3> & colors) {
/* ... */
}