Я пытаюсь привязать объект к функции, но вызывается функция базового класса. Код это просто пример для реального кода. У меня будет только строка позже в реальном коде.
class A {
public:
virtual void f(const std::string &s) {
std::cout << "A " << s << std::endl;
}
};
class B : public A {
public:
void f(const std::string &s) override {
std::cout << "B " << s << std::endl;
}
};
void main() {
std::unique_ptr<A> a = std::make_unique<B>();
std::function<void(const std::string &)> callback
= std::bind(&A::f, *a, std::placeholders::_1);
callback("my string");
}
В результате
A my string
Я попытался изменить ее на & B: f, но получил ошибку.
No viable conversion from 'typename _Bind_helper<__is_socketlike<void (B::*)(const basic_string<char> &)>::value, void (B::*)(const basic_string<char> &), A &, const _Placeholder<1> &>::type' (aka '_Bind<void (Centerity::Cluster::Correlation::B::*(Centerity::Cluster::Correlation::A, std::_Placeholder<1>))(const std::basic_string<char> &)>') to 'std::function<void (const std::string &)>' (aka 'function<void (const basic_string<char> &)>')
Я пытался изменить его на A* a = B();
тот же результат. Не могу найти подобный код нигде. Конечно, создание B b
вызовет B::f
, но это мне не поможет.
Я могу потерять связь и использовать лямбду, но я не знаю как.