从组件A到组件B的RedHawk属性查询/配置
RedHawk Property query/Config from Component A to Component B
我是RedHawk的新手,我有以下场景:
我有三个组件A B和C, B和C都有一个属性技能,这是一个描述B或C能力的关键字。流程是:A启动并查询B.skill和C.skill,因此A知道B和C可以做什么。然后,当A遇到适合B或C技能集的任务时,A将启动该特定组件来完成任务。
我的问题是:组件A如何访问B的属性?我在网上查了一下,发现了一些简单的redhawk查询介绍(https://redhawksdr.github.io/Documentation/mainch4.html节4.6.2),但我希望如果有人能给我展示一个代码片段,演示如何访问B的属性。另外,我找不到查询api的任何详细文档。如果有人能告诉我怎么走就太好了。
谢谢。
这个例子可能会得到一些清理,但在我的例子片段中,CompA有两个输出端口,都是资源类型,名称为compB_connection和compC_connection。然后我们可以连接到compB和compC的资源端口(也称为棒棒糖端口),这是一个直接连接到组件本身的端口,因为它继承了资源API。这使我们能够访问组件上的方法,如start、stop、configure、query等。有关完整列表,请参阅idl文件。
CompB和CompC都有一个id为"skill"的属性。我们可以使用查询API来查询这些属性的值。std::string CompA_i::any_to_string(CORBA::Any value) {
std::ostringstream result;
const char* tmp;
value >>= tmp;
result << tmp;
return result.str();
}
int CompA_i::serviceFunction() {
CF::Properties compB_props, compC_props;
compB_props.length(1);
compC_props.length(1);
compB_props[0].id = "skill";
compC_props[0].id = "skill";
compB_connection->query(compB_props);
compC_connection->query(compC_props);
std::cout << "CompB Skills: " << any_to_string(compB_props[0].value) << std::endl;
std::cout << "CompC Skills: " << any_to_string(compC_props[0].value) << std::endl;
return FINISH;
}
现在,当我们将CompA连接到CompB和CompC并启动波形或沙箱时,我们得到以下输出:
CompB Skills: nunchuck skills
CompC Skills: bow hunting skills
any_to_string方法在核心框架代码的prop_helpers.cpp中找到;在头文件的某个地方可能有一个帮助函数,这将是一个更好的修复。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何将 txt 文件中的行分隔为组件C++
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 用概念检查属性的类型
- 到连接组件算法的问题(递归)
- C++如何将同一类的实例作为属性
- 两个 COM 组件中 ENUM 的重复条目
- 让 Redhawk 组件访问另一个组件的属性
- 组件 X 的超类型未知,其某些属性未经验证
- 将类的属性泄漏到其组件
- 无法更改从C++动态创建的 QML 组件的属性
- 从组件A到组件B的RedHawk属性查询/配置
- 如何从实体组件系统的子类中访问属性