【发布时间】:2010-09-26 06:11:47
【问题描述】:
假设您有一个班级,其工作是连接到远程服务器。我想抽象这个类来提供两个版本,一个通过UDP连接,另一个通过TCP连接。我想构建尽可能精简的运行时代码,而不是使用多态性,我正在考虑模板。这是我的设想,但我不确定这是不是最好的方法:
class udp {};
class tcp {};
template<class T,typename X>
class service
{
private:
// Make this private so this non specialized version can't be used
service();
};
template<typename X>
class service<udp, X>
{
private:
udp _udp;
X _x;
};
template<typename X>
class service<tcp, X>
{
private:
tcp _tcp;
X _x;
};
所以最终的好处是 T 的通用性仍然可用,但是设置 UDP 或 TCP 连接所需的非常不同的代码已经被专门化了。我想你可以把它放在一个类中,或者提供另一个类,它遵循一些纯虚拟接口来设置网络连接,比如 IConnectionManager。
但这确实留下了泛型 T 的代码现在必须在两个专用版本中编写和维护的问题,它们最终是相同的。如何最好地解决这个问题?我有一种感觉,我做错了。
【问题讨论】:
标签: c++ oop templates specialization