Сбой вывода / замены аргумента шаблона при использовании std :: function и std :: bind
У меня ошибка компиляции при использовании std :: function в шаблонной функции-члене, следующий код является простым примером:
#include
#include
using std::function;
using std::bind;
using std::shared_ptr;
class Test {
public:
template
void setCallback(function cb);
};
template
void Test::setCallback(function cb)
{
// do nothing
}
class TestA {
public:
void testa(int a, int b) { }
};
int main()
{
TestA testA;
Test test;
test.setCallback(bind(&TestA::testa, &testA, std::placeholders::_1, std::placeholders::_2));
return 0;
}
И прийти со следующей ошибкой компиляции:
testtemplate.cpp: в функции ‘int main () ’:
testtemplate.cpp: 29: 92: ошибка: не соответствует функция для вызова ‘Test :: setCallback (std :: _ Bind_helper) (int, int), TestA, const std :: _ Placeholder <1> &, const std :: _ Заполнитель <2> &>::тип)'
testtemplate.cpp: 29: 92: примечание: кандидат: testtemplate.cpp: 10: 7: примечание: шаблон void Test :: setCallback (std :: function)
testtemplate.cpp: 10: 7: примечание: не удалось вывести / заменить аргумент шаблона:
testtemplate.cpp: 29: 92: примечание: ‘std :: _ Bind (TestA *, std :: _ Placeholder <1>, std :: _ Placeholder <2>)> ’ не выводится из ‘станд :: function'I»
используя C ++ 11 и g ++ 4.7