首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多态C++对象转换为非多态C对象

将多态C++对象转换为非多态C对象
EN

Stack Overflow用户
提问于 2015-09-24 14:19:36
回答 2查看 253关注 0票数 3

我有一个网络框架(RTI ),它有一个C序列化函数,它接受一个指针并将一个C结构转换成一个字符串。

它还(也是为工作而设计的) C++类。但是,如果我通过添加一个虚拟函数来创建一个C++类的多态性,那么这个序列化、函数分段错误或有时甚至更糟糕的错误输出。

我假设它在内部对结构的内存布局进行假设。

可以从多态C++对象获取原始C指针吗?

我知道我可以创建每个结构两次,一次是多态的,一次是非多态性的,但是这会导致大量的胶水代码。

目前我已经没有想法了。

一些技术背景:C函数在RTI DDS源包中:

DynamicData.c DDS_ReturnCode_t DDS_DynamicData_to_cdr_buffer( . ){.

EN

回答 2

Stack Overflow用户

发布于 2015-09-24 14:28:04

您可以添加一个只包含以下数据的非虚拟基struct

代码语言:javascript
复制
struct DataXYBase {
    int data1;
    double data2;
};

class VirtualBaseClass : public DataXYBase {
    virtual void Function1();
};

class DerivedClass : public VirtualBaseClass {
    virtual void Function1();
};

然后,在将其传递给序列化函数之前,先将其转换为DataXYBase

票数 4
EN

Stack Overflow用户

发布于 2015-09-24 14:27:15

我认为您应该将POD结构中的所有数据(可能可以彼此继承)和多态类中的所有访问器/逻辑捆绑在一起,这些类包含数据结构,或者作为成员(甚至可能通过继承)。您将只序列化数据部分,并从数据结构为多态类提供简单的构造函数。

这将限制所需胶水的数量,并在代码中保留所需的多态性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32763800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档