VC++中的std::function比较问题

多年前VC++刚完善C++11那会儿,我就已经考虑将一个包含有unique timer模型的库中函数指针替换成std::function了,当时就苦恼std::function要如何比较,满世界的论坛,博客找了个遍,也没有答案,最终我只能去二进制层面寻求方法。

最初的时候,我一直在用一段代码来处理这个问题:

template<typename _Ty>
bool is_std_func_equal(_Ty& a, _Ty& b) {
	struct __std_func_struct {
		size_t* vt;
		void* func_ptr;
	};
	__std_func_struct* pa = (__std_func_struct*)&a;
	__std_func_struct* pb = (__std_func_struct*)&b;
	if (pa->func_ptr == pb->func_ptr) {
		return (pa->vt[2] == pb->vt[2]);
	}
	return false;
}

// 请注意,这段代码有bug

在VC++中,可以使用这个结构来模拟std::function的二进制数据:

struct __std_func_struct {

    size_t* vt; // 虚函数表

    void* func_ptr; // 函数指针

};

虚函数表中储存的函数地址:

vt[0] 与 vt[1] 相等,这两个虚函数不重要,不需要我们关注。

vt[2] 中保存了 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值