【发布时间】:2011-11-12 20:24:17
【问题描述】:
我在这个问题上被困了一段时间,我需要你的帮助。
我的 C++ 应用程序正在多个执行站点上运行。我的问题是我不能传递持有虚拟表的对象,因为站点不共享内存(因此来自给定对象的虚拟方法将导致未定义的行为)。 “我不能通过”我的意思是:我不想要任何虚拟桌子。
有趣的是不仅有继承,还有模板和怪诞的概念......
这里是代码
// "Main" code
List< Animals, 5 > list;
List< Animals, 8 > list2;
list.concatenate( list2 );
// GenericList.hpp
template< Type >
class GenericList
{
virtual getBuffer(void) = 0;
virtual getSize(void) = 0;
void concatenate( GenericList<Type> gList)
{
int size = gList.getSize(); // Call to the child...
...getBuffer()...
// processing, etc.
}
}
// List.hpp
template< Type, Size_ >
class List : public GenericList< Type >
{
int getSize()
{
return Size_;
}
Type * getBuffer()
{
return buffer;
}
Type buffer[Size_];
}
我怎样才能摆脱继承?
编辑/根据前几个答案,我可以告诉你我不能实现更好的序列化,代码是私有的。
【问题讨论】:
-
你到底在序列化什么?如果您在另一侧创建对象并使用相同的值填充其成员,则虚拟表在新站点上也应该有效。
-
使用 CRTP 摆脱虚函数怎么样?
-
@RedX :这不完全是序列化,而是多频率(每个频率一个站点)。所以基本上,对象的一侧或另一侧是相同的。锐齿:我会调查的,谢谢。为什么没有发布作为答案? ;)
-
数据是如何序列化的?您的序列化方案是否只是对
char*进行强制转换,然后以sizeof作为字节数通过网络发送它?了解更多有关数据发送方式的信息可以让我们为您提供更好的建议。 -
就是这样完成的;匿名缓冲区...
标签: c++ arrays pointers inheritance virtual