为什么不将生成的端口代码放入单独的文件中
Why not put generated code for ports into separate files
RedHawk 为每个端口生成代码,但将所有 In_i 和 Out_i 类 放入一对文件中:port_impl.h、port_impl.cpp。为什么这些生成的 类 放在一个文件中?对于大多数组件,必须将代码添加到端口方法调用中以实现组件的功能。可以将功能写入其他源文件中的函数,并简单地在 port_impl 方法中添加对新函数的调用,以最大限度地减少对生成文件的更改,但仍然必须将这些调用重新添加到每个方法,如果一个添加额外的端口并且必须重新生成 port_impl。如果每个端口生成的代码都放在单独的文件中,那么添加一个端口只会生成一个额外的文件,而不会覆盖现有文件。这将使添加端口更加容易。
更好的解决方案是简单地创建子端口 类,您希望在它们自己的文件中扩展这些端口。然后在组件代码中,您可以删除指向构造函数中端口的指针(删除旧实现)并将它们设置为指向新的扩展实现的指针。我相信 USRP_UHD 代码中有此方法的示例。
在较新版本的 REDHAWK 中,这是添加此类功能的唯一方法,因为所有 BULKIO 端口实现都已移入框架,不再生成。
RedHawk 为每个端口生成代码,但将所有 In_i 和 Out_i 类 放入一对文件中:port_impl.h、port_impl.cpp。为什么这些生成的 类 放在一个文件中?对于大多数组件,必须将代码添加到端口方法调用中以实现组件的功能。可以将功能写入其他源文件中的函数,并简单地在 port_impl 方法中添加对新函数的调用,以最大限度地减少对生成文件的更改,但仍然必须将这些调用重新添加到每个方法,如果一个添加额外的端口并且必须重新生成 port_impl。如果每个端口生成的代码都放在单独的文件中,那么添加一个端口只会生成一个额外的文件,而不会覆盖现有文件。这将使添加端口更加容易。
更好的解决方案是简单地创建子端口 类,您希望在它们自己的文件中扩展这些端口。然后在组件代码中,您可以删除指向构造函数中端口的指针(删除旧实现)并将它们设置为指向新的扩展实现的指针。我相信 USRP_UHD 代码中有此方法的示例。
在较新版本的 REDHAWK 中,这是添加此类功能的唯一方法,因为所有 BULKIO 端口实现都已移入框架,不再生成。