已知编译时发布订阅关系,如何实现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
相关产品推荐
相关产品推荐

