一个调用问题

在看项目代码时,发现有个调用,明明调用的函数基类的,搞不懂为什么会调用到派生类的,这是个虚函数,我想肯定是指针的问题,我又想到了是绑定时候的问题

thrTransData::thrTransData()
{
m_spTimerFactory = NEWSP(TimerFactory);

new std::thread(std::bind(&thrTransData::thread, this));
};

感觉这个this绑定的肯定是基类的指针啊,调用怎么会调用到派生类上面去,自己写个例子测试


#include <iostream>
#include <functional>
using namespace std;

class A{
public:
A();
virtual void fun1(){};
void fun2();
std::function<void()> m_heh;
};

A::A()
{
m_heh = std::bind(&A::fun2, this);
}

void A::fun2()
{
fun1();
}

class B:public A
{
public:
void fun1();

private:

};

void B::fun1()
{
std::cout<<"hhe";
}

int main()
{
A* p = new B;
p->m_heh();
getchar();
return 0;

}

调用的果然是派生类的fun1,我知道是这个绑定this指针的问题,但具体的还是不清楚,得看看c++内存模型这本书,大家对这本书评价都很高,到时得看看。

时间: 2024-10-13 23:25:29

一个调用问题的相关文章

十分钟开发一个调用Activity的PhoneGap插件

在HybridApp开发中,非常多业务我们是没有办法通过HTML5+js实现的,比方调用第三方的包括Activity的jar包,一些必须使用原生代码才干实现的功能,比方复杂的UI的效果,调用通讯相关的协议栈,第三方支付sdk等.这样的情况我们须要通过写cordova插件的方式,包装android原生代码为插件,供上层javascript调用.本文解说一个调用Activity并返回Activity结果的cordova插件样例,帮助大家掌握cordova plugin的开发 . Cordova插件是

利用MyEclipse开发一个调用webservice接口的程序

上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选中--New  Webservice Client 2:选中JAX-WS,下一步 3:在WSDL URL里面写入接口的测试地址 ↓接下来WSDL VAlidation竟然报错了,如何解决请往下看 把localhost换位主机IP地址 下一步 ,OK 通过通过验证 客户端会默认给我们选中需要导入的包

从一个程序员的角度看——微信小应用

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到

使用反射机制调用属性和私有成员与代理模式的介绍

使用反射机制调用属性: 通过反射机制可以获得类的属性,获得到的属性同样的可以进行赋值.得值操作,调用getField方法并传递属性的名称可以获得[学Java,到凯哥学堂kaige123.com]指定的属性,调用getFields方法则可以获得全部属性,但是这种方式不能获得私有属性: 代码示例: Student类示例: 运行结果: 从运行结果可以看出只拿出了公开的属性,私有的属性拿不到. 使用反射机制调用私有成员: 1.调用私有属性 在反射机制里调用私有属性需要通过getDeclaredField

调试Ajax调用的利器firebug

这几天我在家里调试PCS的Ajax调用时候发现一个问题就是调试手段太少,一般我会在进入ajax调用前加上一段alert输出变量信息. 比如 alert($("#taskid").val()); alert("https://pcs-gse00010366.process.us2.oraclecloud.com/bpm/api/4.0/tasks/"+$("#taskid").val()); 然而发现在后续GET或者POST一个调用中往往返回的错误

项目中js调用service和procedure的办法

Ajax.js 1 /**通用ajax服务的定义对象 2 3 * services可以是单个服务对象,也可以是service服务数组 4 * 具体服务的定义请参考appendServices成员函数 5 */ 6 function Service(services){ 7 this.services=[]; 8 this.shareParameters={}; 9 /**添加共享参数,在这里统一设置共享参数 10 */ 11 this.addShareParameters=function(sh

拦截器都是通过代理的方式调用,是AOP的一种实现

当请求到达Struts2的ServletDispatcher时,Struts2根据配置文件,实例化相对应的拦截器对象,形成一个List,一个一个调用. 每个action请求都包装在一系列的拦截器内部,拦截器可以在Action执行之前做准备操作init(),可以在Action执行之后做回收操作destroy(),可以将操作转交给下面的拦截器invoke(),也可以直接退出操作return Action.字符串常量,返回客户已定的视图资源. 自定义拦截器类有两种方法:实现Interceptor接口,

进击的雨燕-------------可空链式调用

详情转自:http://wiki.jikexueyuan.com/project/swift/chapter2/07_Closures.html 可空链式调用(Optional Chaining)是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这种调用将返回空(nil).多个连续的调用可以被链接在一起形成一个调用链,如果其中任何一个节点为空(nil)将导致整个链调用失败.

RPC-远程过程调用协议

远程过程调用协议 同义词 RPC一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.