【问题标题】:c++ class declaration when same routine, different member variable type相同例程,不同成员变量类型时的c ++类声明
【发布时间】:2018-10-31 10:03:34
【问题描述】:

我正在尝试制作这样的课程

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 个不同的变量:必须使用具有不同参数的方法

对于这个问题有什么建议或已知的解决方案吗? 非常感谢。

【问题讨论】:

  • 你听说过继承吗?
  • 如果SendData 的定义在两者中基本相同,那么模板听起来是个不错的答案 - 您能否详细说明您在使用类模板时遇到的问题?如果功能相当不同,多态可能是要走的路。
  • 模板。相同的例程具有相同的成员变量,不同的类型。这正是模板的用途。整个 C++ 都建立在此之上。如果你不喜欢它,也许你需要一种不同的语言。

标签: c++ class


【解决方案1】:

您可以使用模板类:

template <typename NetworkType>
class NetworkClass
{
    NetworkType tcp_socket_{io_service_};
};

然后使用:

using IPclass = NetworkClass<tcp::socket>;

如果您需要更多,您可以使用类型特征来定义更高级的行为,而无需动态多态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多