объявление класса 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 разных переменных в одном классе: использовать метод с разными параметрами

Есть ли какое-либо предложение или известное решение этой проблемы? Большое спасибо.

Всего 1 ответ


Вы можете использовать шаблонный класс:

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

а затем использовать:

using IPclass = NetworkClass<tcp::socket>;

Если вам нужно больше этого, вы можете использовать черты типа для определения более продвинутых типов поведения без динамического полиморфизма.


Есть идеи?

10000