大佬教程收集整理的这篇文章主要介绍了c – std :: bind和对基类方法的非虚拟调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有基类A和派生类B.A有一个虚函数foo()被B覆盖.
class A { public: virtual void foo() { std::cout << "Hello from A::foo()!";} } class B : public A { public: void foo() overide { std::cout << "Hello from B::foo()!";} }
如果我想从B类对象调用A :: foo(),我会进行非虚拟调用:
B b_obj; b_obj.A::foo(); // prints "Hello from A::foo()!"
现在我想使用std :: bind并从b_obj对A :: foo()进行非虚拟调用,我该怎么做?
我已经尝试将b_obj转换为A并使用& A :: foo()的地址,但没有运气.
auto f = std::bind(&A::foo,static_cast<A*>(&b_obj)); f(); // prints "Hello from B::foo()!" but it should print "Hello from A::foo()!"
// Base method B b_obj; b_obj.A::foo(); // prints "Hello from A::foo()!" // First method auto k = [](auto b){ b.A::foo(); }; k(b_obj); // Second method auto f = std::bind(&A::foo,*static_cast<A*>(&b_obj)); f();
所有打印:
Hello from A::foo()! Hello from A::foo()! Hello from A::foo()!
以上是大佬教程为你收集整理的c – std :: bind和对基类方法的非虚拟调用全部内容,希望文章能够帮你解决c – std :: bind和对基类方法的非虚拟调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。