gpt4 book ai didi

c++ - 从 "dumb"基类构造对象

转载 作者:太空狗 更新时间:2023-10-29 19:52:27 26 4
gpt4 key购买 nike

我创建了一个标准结构的“智能变体”——系统提供了struct canmsg,这种类型的数据是从can设备中读取的,我经常处理这样的帧。

现在,为了更容易处理它们,我创建了一个子类:class TCanFrame : public canmsg。它没有任何额外的属性,但它有一堆方法——一个友好的构造函数,用于从头开始创建帧、命令和数据、读取和设置不同属性“上面的抽象层”的 getter 和 setter (例如, channel 子地址编码在数据中)。

struct canmsg_t 实例构造 TCanFrame 类型对象的最佳方法是什么?我可以从 &sourcethis 做一个 memcpy 吗?或者我需要逐个字段复制它吗?或者一些其他的技巧,让一个整洁的 TCanFrame 实例从“哑巴” canmsg 中创建出来,或者我可以让复制构造函数接受父类吗?

最佳答案

如果您不添加任何数据成员,并且不需要访问canmsg 的任何 protected 成员,我认为您不应该创建派生类。相反,您可以添加自由函数以在定义 canmsg 的命名空间中执行额外功能,然后将它们与普通 canmsg 对象一起使用。您可以阅读更多关于类的“非成员接口(interface)”以及为什么它是一件好事的信息,例如这些文章 Scott MeyersHerb Sutter .

另请注意,如果您创建派生类并且 canmsg 没有虚拟析构函数,您可以通过调用 delete 轻松遇到未定义的行为 canmsg* 实际上指向一个 TCanFrame 对象。

关于c++ - 从 "dumb"基类构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com