考虑使用以下模板类来处理不同的 boost :: asio 套接字(即TCP / UDP / Serial):
template<class T>
class Connection:: private boost::noncopyable, public std::enable_shared_from_this<Connection<T>> {
Connection(const std::shared_ptr<IoServiceWrapper> &ioService,
const std::shared_ptr<boost::asio::io_context::strand> &ioStrand);
..
}
其中每个 boost 套接字对象在打开连接时需要特定参数,例如 dstAddr 和 dstPort 以创建TCP / UDP的端点串口, portName , baudRate , serial_port_base 参数(例如,字符大小,停止位等),用于串行端口。
提供与升压插座的特定类型 T 相关的参数的最佳方法是什么?
我在考虑两种可能的解决方案:
1)从模板类继承,例如:
class TcpPortConnection : public Connection<boost::asio::ip::tcp::socket> {
public:
TcpPortConnection(
const std::shared_ptr<IoServiceWrapper> &ioService,
const std::shared_ptr<boost::asio::io_context::strand> &ioStrand,
const std::string &dstAddress, uint16_t dstPort)
: Connection(ioService, ioStrand), _dstAddress(dstAddress), _dstPort(dstPort) {}
...
}
2)模板类的多个构造函数,例如:
template<class T>
class Connection:: private boost::noncopyable, public std::enable_shared_from_this<Connection<T>> {
Connection(const std::shared_ptr<IoServiceWrapper> &ioService,
const std::shared_ptr<boost::asio::io_context::strand> &ioStrand,
const std::string &dstAddress,
uint16_t dstPort);
Connection(const std::shared_ptr<IoServiceWrapper> &ioService,
const std::shared_ptr<boost::asio::io_context::strand> &ioStrand,
const std::string &portName,
uint32_t baudRate,
boost::tuples::tuple<boost::asio::serial_port_base::character_size,
boost::asio::serial_port_base::parity,
boost::asio::serial_port_base::stop_bits> SerialParams);
..
}
以前的方法是否有更优雅的解决方案?