C++ CRTP模板框架封装咨询:多参数Bridge模板复用方案
CRTP框架下Bridge类的通用包装模板设计问题
我有一套基于CRTP的类模型,大部分信息是静态的,所有类都是单例,因此可以直接通过类型名而非对象引用来访问。现有伪代码定义的Bridge基类、各类Bridge实现以及SigOp基类如下:
// Bridge base template class BridgeBaseT < class tDerivedBridgeType, class tRequiringDomain, class tProvidingDomain >; // Bridge types SingleBridgeT < class tDerivedBridgeType, class tRequiringDomain, class tProvidingDomain > : public BridgeBaseT<tDerivedBridgeType, tRequiringDomain, tProvidingDomain>; ThreadedFixedBridgeT < class tDerivedBridgeType, class tRequiringDomain, class tProvidingDomain, const FixedQueueSize tQueueSize = FixedQueueSize::_15_SLOTS > : public BridgeBaseT<tDerivedBridgeType, tRequiringDomain, tProvidingDomain>; ThreadedDynamicBridgeT < class tDerivedBridgeType, class tRequiringDomain, class tProvidingDomain, const unsigned int tInitialQueueSize = 16, const unsigned int tQueueIncrement = 8 > : public BridgeBaseT<tDerivedBridgeType, tRequiringDomain, tProvidingDomain>; // Base class for signals and operations SigOpT < class tDerivedSigOp, class tRequiringDomain, class tProvidingDomain >
由于tRequiringDomain、tProvidingDomain这类模板参数在多处重复使用,作为框架层希望通过一个包装模板整合所有组件,减少用户的编码量,预期使用形式如下:
using MyBridgeWrapper = BridgeWrapperT < MyReqDomain, MyProvDomain, <BRIDGE_TEMPLATE>, MySigOpTypeList... > {...};
其中<BRIDGE_TEMPLATE>需要替换为上述任意*BridgeT<>模板(包括其特定的额外参数,比如const FixedQueueSize tQueueSize),同时MyReqDomain、MyProvDomain要能自动转发给该Bridge模板,MySigOpTypeList则是SigOpT<>的参数包。
目前卡在无法找到通用方式让<BRIDGE_TEMPLATE>适配所有不同的Bridge模板:
- 尝试过模板模板参数,但线程相关Bridge的额外参数(常量整型、枚举类型)多样性导致适配失败;
- 尝试给
BridgeBaseT添加参数包,但额外参数是常量整型值,无法纳入常规参数包;
各种尝试都陷入了C模板特性的限制。当前使用C14,可考虑升级到更高版本。
内容的提问来源于stack exchange,提问作者Nilsie
相关产品推荐
相关产品推荐

