私は boost :: asio :: io_service
オブジェクトを持つクラスを持っています。このオブジェクトを boost :: shared_ptr
に保存します。
だから、私のヘッダーはこのように見えます(私は不要なコードを取り除き、それで気が散るわけではありません)
class CommandDispatcher
{
private:
boost::shared_ptr m_ioservice;
public:
CommandDispatcher();
};
CommandDispatcher
のオブジェクトを作成するときに、ポインタのために io_service
オブジェクトを初期化する必要があります。今私はこれをどうやって行うのかについてはあまりよく分かりません。私は2つの異なる解決策を探しましたが、1つだけが働いていて、それがいいのかどうかは分かりません。しかし、自分自身を参照してください:
CommandDispatcher::CommandDispatcher()
{
m_ioservice.reset(new boost::asio::io_service); //this actually works
//m_ioservice = boost::make_shared
// (new boost::asio::io_service); //this doesn't work
}
したがって、 reset
呼び出しが機能していますが、実際にはポインタを再割り当てすることになります。だから、それを使うのは間違っていないですが、それは私にとって最も良い解決策のようには見えません。
私が別の質問で見つけた make_shared
呼び出しの提案。しかし、これは私のためにはうまくいきません(公式のboostの例で説明したように実装しました)。私は得る
/usr/local/include/boost/smart_ptr/make_shared.hpp:189:エラー: 'boost :: asio :: io_service *'から 'size_t'への無効な変換
/usr/local/include/boost/smart_ptr/make_shared.hpp:189:エラー: 'boost :: asio :: io_service :: io_service(size_t)'の引数1を初期化しています
私は今これをどうやって行うのかがはっきりしていません。これが最善の方法です(おそらくそれを行うための完全な他の選択肢があります)。あるいは、私はそれを正しくやっているかもしれませんが、 io_service
が間違っています。
この質問が既にこのようにここにはないことを願っています(古い質問をいくつか見上げましたが、私にとっては答えが見当たりませんでした)。