提问人:Denis Zlobin 提问时间:7/11/2023 更新时间:7/11/2023 访问量:73
使用 std::function 调用基类方法
Calling base class method with std::function
问:
我使用了基本类虚拟方法,结果很奇怪。然后我调用 object,调用派生的(非基本)方法。拜托,你能告诉我有问题吗?std::function
std::function
#include <functional>
#include <iostream>
#include <string>
struct A
{
virtual void username(const std::string& name)
{
std::cout << "A: username" << name << '\n';
}
A* A_ptr()
{
return this;
}
};
struct B : public A
{
void username(const std::string& name) override
{
std::function<void(const std::string&)> f = std::bind(&A::username, A::A_ptr(), std::placeholders::_1);
wrapper(f, name);
}
void wrapper(const std::function<void(const std::string&)>& f, const std::string& s)
{
f(s);
}
};
int main()
{
B b;
b.username("tname");
}
答:
2赞
Alan Birtles
7/11/2023
#1
我不认为这是不可能的,你可以用 lambda 来做到这一点:std::bind
std::function<void(const std::string&)> f = [this](const std::string& name) {
A::username(name);
};
默认情况下,指向虚拟方法的成员函数指针将使用虚拟调度,要调用基类方法,您需要使用不同的语法,但这是不可能的std::bind
评论
0赞
Denis Zlobin
7/11/2023
谢谢你非常匹配!这是正确的工作。
评论