You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知编译时发布订阅关系,如何实现C++模板化发布/订阅模式?

编译时模板化实现C++发布/订阅模式

在C++中,可以用模板灵活实现发布/订阅模式。

问题背景

假设编译时已知所有发布者/订阅者关系,且不存在运行时退订操作,如何在C++中实现编译时模板化的发布/订阅模式?

该模式用于有向无环图(Directed Acyclic Graph,DAG)的高性能数据处理场景,数据需通过发布者/订阅者关系在图节点间传播。目标是实现该DAG,让编译器能够对(可能嵌套的)发布者/订阅者关系进行跨代码优化。

我的思路

  • 计划将FooNode、BarNode等图节点作为通用Node类的子类,通过编译时模板实例化关联这些节点对象,而非在运行时调用Node::subscribe函数。
  • 但无法将节点对象的指针作为模板参数(指针值仅在运行时确定),如下代码无法实现pub向foo和bar发布消息:
Node* foo = new FooNode<>();
Node* bar = new BarNode<>();
Node* pub = new FooNode<std::tuple<foo, &FooNode<>::cllbck>, std::tuple<bar, &BarNode<>::cllbck>>();
  • 理想情况下,可以按照发布者到订阅者的顺序定义foo、bar和pub,例如本示例中pub应在foo、bar之前定义。

内容的提问来源于stack exchange,提问作者vohir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:10:34