c++ - 相同例程,不同成员变量类型时的c ++类声明
问题描述
我正在尝试制作这样的课程
class IPclass {
void SendData();
io_service io_service_;
tcp::socket tcp_socket_{io_service_};
};
class UDSclass {
void SendData();
io_service io_service_;
local::stream_protocol::socket tcp_socket_{io_service_};
};
问题是,IPclass 和 UDSclass 具有相同的例程和相同的成员变量,但有一个区别:套接字类型。
我想创建一个名为 SessionClass 的类,而不是这两个类。
这些是我尝试过的选项和失败的原因。
- 联合:不能使用相同的变量名。(我想在方法上使用var而不是u.var1)
- 模板:必须在每个构造函数上定义模板类型名。
- 在一个类中使用 2 个不同的变量:必须使用具有不同参数的方法
这个问题有什么建议或已知的解决方案吗?非常感谢。
解决方案
您可以使用模板类:
template <typename NetworkType>
class NetworkClass
{
NetworkType tcp_socket_{io_service_};
};
然后使用:
using IPclass = NetworkClass<tcp::socket>;
如果您需要更多,您可以使用类型特征来定义更高级的行为,而无需动态多态。
推荐阅读
- php - 如何在php中只打印新的数组值
- swift - 使用 NSPersistentCloudKitContainer 的可选核心数据关系问题
- protocol-buffers - 对 gRPC 消息建模的最佳方法
- ruby-on-rails - Rail6 db:migrate 失败 - 参数数量错误(给定 1,预期 0)
- sql - 为什么 select with subselect 在条件下不返回任何行的速度要慢得多?
- spring - 在spring boot中使用pageable获取和删除对象
- php - 页脚没有取代它的位置
- java - SAP Hybris 无法创建自定义横幅组件
- c# - JSON 中的动态键
- java - 从 PDF 剥离器转置矩阵