私は以下のことがあり、エラーを解決することができない場合は助けてください。C++ - スマートポインタ - テンプレートを介してベースクラスへの共有クラスのポインタを渡す
私はどこかのテンプレート定義として次のクラスを持っています。
template<class ConcreteHandlerType>
class SomeAcceptor: public ACE_Acceptor<ConcreteHandlerType, ACE_SOCK_Acceptor>
は、いくつかの他のファイルでは、私はコンストラクタでこのクラスを初期化
class initialize {
typedef SomeAcceptor<BaseClassSomeHandler> baseAcceptor_t;
typedef SomeAcceptor<DerivedClassSomeHandler> derivedAcceptor_t;
boost::shared_ptr<baseAcceptor_t;> mAcceptor;
boost::shared_ptr<derivedAcceptor_t;> mDerivedAcceptor;
bool HandleAcceptNotification(BaseClassSomeHandler& someHandler);
initialize() : mAcceptor(0), mDerivedAcceptor(new DerivedAcceptor_t) {
mAcceptor->SetAcceptNotificationDelegate(fastdelegate::MakeDelegate(this, &initialize::HandleAcceptNotification));
}
}
私が手にエラーが発生しました(
error: no matching function for call to `boost::shared_ptr<SomeAcceptor<BaseClassSomeHandler> >::shared_ptr(int)'common/lib/boost_1_39_0/boost/smart_ptr/shared_ptr.hpp:160: note: candidates are: boost::shared_ptr<SomeAcceptor<BaseClassSomeHandler> >::shared_ptr(const boost::shared_ptr<SomeAcceptor<BaseClassSomeHandler> >&)
common/lib/boost_1_39_0/boost/smart_ptr/shared_ptr.hpp:173: notboost::shared_ptr<T>::shared_ptr() [with T = SomeAcceptor<BaseClassSomeHandler>]
は私も ブールHandleAcceptNotificationを持つ関数のオーバーロードを試してみましたDerivedClassSomeHandler &ですsomeHandler);
ですが、mAcceptorはSomeAcceptor BaseClassSomeHandlerタイプなので、このエラーは発生しますが、これを修正します。
私は何とかそれをキャストする必要がありますが、それを行う方法は?あなたはmAcceptor
がNULL(0)、その場合は、あなたドン割り当てることにしたいよう
iは、コンストラクタ内で以下のようにやってみました、それはあなたのコードから
initialize() : mAcceptor(0), mDerivedAcceptor(new DerivedAcceptor_t) {
mAcceptor = mDerivedAcceptor; // Error here
mAcceptor->SetAcceptNotificationDelegate(fastdelegate::MakeDelegate(this, &initialize::HandleAcceptNotification));
}