我有一个网络框架(RTI ),它有一个C序列化函数,它接受一个指针并将一个C结构转换成一个字符串。
它还(也是为工作而设计的) C++类。但是,如果我通过添加一个虚拟函数来创建一个C++类的多态性,那么这个序列化、函数分段错误或有时甚至更糟糕的错误输出。
我假设它在内部对结构的内存布局进行假设。
可以从多态C++对象获取原始C指针吗?
我知道我可以创建每个结构两次,一次是多态的,一次是非多态性的,但是这会导致大量的胶水代码。
目前我已经没有想法了。
一些技术背景:C函数在RTI DDS源包中:
DynamicData.c DDS_ReturnCode_t DDS_DynamicData_to_cdr_buffer( . ){.
发布于 2015-09-24 14:28:04
您可以添加一个只包含以下数据的非虚拟基struct:
struct DataXYBase {
int data1;
double data2;
};
class VirtualBaseClass : public DataXYBase {
virtual void Function1();
};
class DerivedClass : public VirtualBaseClass {
virtual void Function1();
};然后,在将其传递给序列化函数之前,先将其转换为DataXYBase。
发布于 2015-09-24 14:27:15
我认为您应该将POD结构中的所有数据(可能可以彼此继承)和多态类中的所有访问器/逻辑捆绑在一起,这些类包含数据结构,或者作为成员(甚至可能通过继承)。您将只序列化数据部分,并从数据结构为多态类提供简单的构造函数。
这将限制所需胶水的数量,并在代码中保留所需的多态性。
https://stackoverflow.com/questions/32763800
复制相似问题