2017-08-30 48 views
0

我需要覆盖我的波形上的configure(),并试图按照手册中的建议操作,方法是在我的。[h,cpp]中重写PropertySet_impl :: configure,但调用在我的覆盖PropertySet_impl ::配置。它在我使用python脚本配置我的组件时起作用,但它似乎并未被DomainManager使用.prf.xml在域配置文件中进行初始配置调用。覆盖配置不适用于初始配置

您是否以其他方式发送此初始配置,并且有没有办法可以覆盖这些配置?

回答

1

尝试使用setPropertyConfigureImpl来获取需要自定义配置逻辑而不是重写配置的属性。我相信这是在设置属性的初始调用时调用的。

+0

谢谢。我没有注意到2.1中的这个新功能,但它在2.1手册中有描述。我希望允许RedHawk管理配置,只是做一些额外的处理,但由于它没有看到初始配置,我会尝试setPropertyConfigureImpl或可能registerPropertyListener。其中之一应该让我做我需要的。 –

1

从REDHAWK 2.0开始,组件支持在调用initialize()之前创建组件时调用一次的新方法initializeProperties()。类型“属性”的任何属性通过此调用被赋予它们的初始值,如果提供的话使用覆盖值。传统的“configure”类属性仍然通过initialize()后面的configure()调用进行初始化。

如果为你的属性设置配置函数就足够了,我会鼓励这种方法。如果您希望在初始化时调用它们,您将需要在C++构造函数中设置它们,但不是REDHAWK构造函数()方法。

根据你的问题,属性监听器可能不适合;属性更改通知不是由initializeProperties()触发的,只是由configure()触发的。请注意,C++接口是addPropertyListener(); registerPropertyListener()是一种支持属性更改的外部通知的CORBA方法。