请问如何定义模板父类中声明的模板方法?
请问如何定义模板父类中声明的模板方法?
嘿,我来帮你捋清楚这个C++模板的问题!你现在碰到的是模板类里嵌套模板成员函数的定义/特化场景,咱们一步步拆解你的代码问题,再给出正确写法。
先看你的原始代码问题
你在StopOrder.hpp里尝试用template<> template<>来定义StopOrder::execute,但这里有个小问题:你只是用using StopOrder = StopOrderBase<MarketOrder>创建了类型别名,并没有先对StopOrderBase<MarketOrder>这个类模板实例做全特化声明,直接这么写编译器会报错。
正确写法分两种场景
场景1:仅给类模板的特定实例定义成员模板函数
如果你只是想给StopOrderBase<MarketOrder>这个具体实例的execute模板方法写实现,不需要修改类的结构,直接用类型别名+成员模板定义即可:
// StopOrderBase.hpp 保持不变 template <typename TriggerOrderType> struct StopOrderBase { template <typename OrderBook> bool execute(OrderBook& orderbook) const noexcept; };
// StopOrder.hpp #include "StopOrderBase.hpp" // 先给特定实例起别名 using StopOrder = StopOrderBase<MarketOrder>; // 直接定义这个实例的成员模板函数,不需要外层的template<> template <typename OrderBook> bool StopOrder::execute(OrderBook& orderbook) const noexcept { // 这里写你的业务逻辑,比如示例里的return true; return true; }
场景2:先全特化类模板,再定义其成员模板函数
如果你需要修改StopOrderBase<MarketOrder>这个类的结构(比如新增成员变量/函数),那得先全特化整个类,再在特化类里声明并定义成员模板:
// StopOrderBase.hpp 保持不变 template <typename TriggerOrderType> struct StopOrderBase { template <typename OrderBook> bool execute(OrderBook& orderbook) const noexcept; };
// StopOrder.hpp #include "StopOrderBase.hpp" // 先全特化StopOrderBase<MarketOrder>类 template <> struct StopOrderBase<MarketOrder> { // 重新声明成员模板函数(也可以加其他自定义成员) template <typename OrderBook> bool execute(OrderBook& orderbook) const noexcept; }; // 定义这个特化类的成员模板函数 template <typename OrderBook> bool StopOrderBase<MarketOrder>::execute(OrderBook& orderbook) const noexcept { return true; } // 可选:给特化后的类起别名 using StopOrder = StopOrderBase<MarketOrder>;
关于你提到的TrailingStopOrderBase
如果它是和StopOrderBase类似的模板类结构,那完全可以套用上面的两种写法,只需要把TriggerOrderType替换成你需要的类型,再按照对应场景定义成员模板函数就行。
内容来源于stack exchange
相关产品推荐
相关产品推荐

