C++ 新手,遇到过这样的代码(也不确定这是否是正确的做法)
template<ReqType, RespType>
class StreamManager {
...
...
}
using UpstreamManager = StreamManager<UpstreamReq, UpstreamResp>;
using DownstreamManager = StreamManager<DownstreamReq, DownstreamResp>;
using SidestreamManager = StreamManager<SidestreamReq, SidestreamResp>;
我想实现一个函数,它根据传递给函数的类型返回这些类型之一。有没有办法将其定义为某种常见类型。
**[ReturnType]** CreateStreamManager(StreamType type) {
switch(type) {
case upstream:
return new UpstreamManager();
case downstream:
return new DownstreamManager();
case sidestream:
return new SidestreamManager();
}
}
有没有办法为这个 CreateStreamManager 函数定义这个 ReturnType ?
最佳答案
您可以像这样“重载”函数:
UpstreamManager* CreateStreamManager(UpstreamReq req) {
return new UpstreamManager();
}
DownstreamManager* CreateStreamManager(DownstreamReq req) {
return new DownstreamManager();
}
或者您可以编写一个“工厂函数”,但前提是 StreamManager
继承了一个可以是通用返回类型的非模板基类:
class BaseStreamManager {
virtual ~BaseStreamManager() = default;
};
template<ReqType, RespType>
class StreamManager : public BaseStreamManager {
}
BaseStreamManager* CreateStreamManager(StreamType type) {
switch(type) {
case upstream:
return new UpstreamManager();
case downstream:
return new DownstreamManager();
case sidestream:
return new SidestreamManager();
}
}
关于c++ - 模板类的不同对象的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235613/