私はboost.asio tcpソケットをクラスメンバーにしてすべてのクラス関数を取る必要がないようなクラス 'TcpCom'を持っています(私が作ろうとしている 'COM'基底クラスのジェネリックデザインを破って)パラメータとしてTCPソケットに入れます。しかし、クラスのメンバ初期化リストでソケットを適切に初期化する方法が混乱しています。パラメータを持つクラスメンバーオブジェクトを初期化する正しい方法
通常、それを使用して作成することになります。私は同様の問題に遭遇したとき
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket tcpSocket(io_service);
は、以前私は、オブジェクトのクラスメンバー私はメンバー初期化リストでnew
を使用して初期化されたオブジェクトのunique_ptr
を作ったが、後それは悪い習慣でした。このデザインを動作させる良い方法があるのでしょうか、あるいはTcpComがTCPソケットをパラメータとして受け入れるべきでしょうか?
#ifndef TCPCOM_H
#define TCPCOM_H
#include "COM.h"
#include <boost/asio.hpp>
class TcpCom : public COM {
public:
TcpCom() : remoteHost(""), remotePort(""), connectedToRemoteHost(false)
{ }
void sendMessage();
void connectToRemoteHost(std::string host, std::string port);
private:
//Needs to be initialized
boost::asio::io_service io_srv;
//Needs to be initialized
boost::asio::ip::tcp::socket tcpSocket;
std::string remoteHost;
std::string remotePort;
bool connectedToRemoteHost;
};
#endif
-
#ifndef COM_H
#define COM_H
#include <string>
class COM {
public:
COM();
virtual void sendMessage() = 0;
virtual void connectToRemoteHost(std::string host, std::string port) = 0;
bool connectedToRemoteHost;
virtual ~COM();
protected:
private:
};
#endif // COM_H