相同例程,不同成员变量类型时的c++类声明

标签 c++ class

我正在尝试创建一个类似这样的类

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 的类,而不是这两个类。

这些是我尝试过的选项和失败的原因。

  • union :不能使用相同的变量名。 (我想在方法上使用 var 而不是 u.var1)
  • 模板:必须在每个构造函数上定义模板类型名。
  • 在一个类中使用 2 个不同的变量:必须使用具有不同参数的方法

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

最佳答案

您可以使用模板化类:

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

然后使用:

using IPclass = NetworkClass<tcp::socket>;

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

关于相同例程,不同成员变量类型时的c++类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53080781/

相关文章:

c++ - 超市管理系统的类之间应该是什么关系?

php - 在 PHP 中获取一个类的所有实例

c++ - 访问保存在 unique_ptr 的多维 vector 中的对象的方法

c++ - 为什么在 C 和 C++ 的设计中没有对 CPU 状态寄存器的内在访问?

c++ - 我想重载运算符 '=' 但在重载之后运算符没有将正确的信息传递给对象

class - 每次应用类时的 CSS3 动画(Firefox 错误?)

c++ - 最烦人的解析 : why doesn't `g( ( f() ) );` call `f` 's default constructor and pass the result to `g` 's ctor that takes a `f` ?

c++ - 私有(private)虚拟方法的用途是什么?

c++ - 在 C++ 帮助中使用 setprecision()

c++ - Linux下如何检测另一个进程并与其通信?