关于带有虚函数的结构体能否socket传输给远端程序(非本机)

doudoushen 2016-06-04 09:41:01
之前试过是可以的,但是觉得好奇怪。

大致流程:
memcpy拷贝这个结构体对象到buff,然后发送到远端设备,远端设备memcpy出来到新对象,然后这个对象就能使用
这台机器的虚表指针,发到远端还能用么?


对此我只是猜 续表指针是不是相对的地址(这样两边就一致了)从而能另外台设备也能用了。

...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2016-06-06
  • 打赏
  • 举报
回复
类似对象序列化即可~
paschen 版主 2016-06-05
  • 打赏
  • 举报
回复
你只能传递必要数据,然后远端程序根据这些数据重新构造对象(好比你保存带有虚函数的结构体到文件一样)
ID870177103 2016-06-05
  • 打赏
  • 举报
回复
struct A {
	int a ;
	virtual void set () = 0 ;
} ;

struct B :public A {
	virtual void set () {
		a = 233 ;
	}
} ;

struct _B {
	void **__vptr ;
	int a ;
} ;

void set (A &a) {
	a.a = 101 ;
}

#include <iostream>

int main () {
	B b ;
	void *vlist[] = {set} ;
	reinterpret_cast<_B &> (b).__vptr = vlist ;
	b.set () ;
	std::cout << b.a << std::endl ;
	((A *) &b)->set () ;
	std::cout << b.a << std::endl ;
	return 0 ;
}
ID870177103 2016-06-05
  • 打赏
  • 举报
回复
因为c++的虚函数只有在指针的情况下才会有多态 你直接调用成员函数的话,编译器已经确定好了这成员函数的地址,不会访问虚函数表 不信你可以把两边的虚函数写得不一样,或者使用父类指针调用虚函数
renwotao2009 2016-06-04
  • 打赏
  • 举报
回复
只能传含有基本类型的结构体
Saleayas 2016-06-04
  • 打赏
  • 举报
回复
不会使用原来的虚函数,使用的是目标机器上的虚函数。 虚函数是基于类的,而不是基于类实例的。 你复制到远程的数据是基于类实例的。 在目标机器上,虚函数使用的目标结构体的 this 指针。 其实如果需要使用虚函数,不要这样去做。 定义一个 POD 的结构体。 通信协议基于这个 POD 的 struct . 然后,定义一个你需要的有虚函数的类,继承这个 struct 就可以了。 比如 class CPoint 这个类有自己的构造,成员函数等等,但是其数据定义在 struct POINT 中。 这样,一个点的表示其实就在 struct POINT 中。 至于 CPoint 如何定义,本地和远程的代码可以自己定义自己的算法。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧