gpt4 book ai didi

C++ - 智能指针 - 通过模板将派生类共享指针传递给基类

转载 作者:太空狗 更新时间:2023-10-29 23:09:04 26 4
gpt4 key购买 nike

我有以下问题并且难以解决错误,请帮助。

我在某处有以下类作为模板定义。

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>]

我还尝试过重载函数 bool HandleAcceptNotification(DerivedClassSomeHandler& someHandler);

但是因为 mAcceptor 是 SomeAcceptor BaseClassSomeHandler 类型,所以我得到了这个错误,但是要解决这个问题。

我想我需要以某种方式转换它,但该怎么做呢?

我尝试在构造函数中执行以下操作,但没有成功

    initialize() : mAcceptor(0), mDerivedAcceptor(new DerivedAcceptor_t) {

mAcceptor = mDerivedAcceptor; // Error here

mAcceptor->SetAcceptNotificationDelegate(fastdelegate::MakeDelegate(this, &initialize::HandleAcceptNotification));
}

最佳答案

从您的代码来看,您似乎希望为 mAcceptor 分配 NULL (0),如果是这种情况,您根本不需要初始化它,因为默认构造函数将采用照顾那个。但是,由于您立即对该 (NULL) 指针调用了一个函数,因此并不能立即清楚地知道您想要做什么。

如果您希望 mAcceptormDerivedAcceptor 指向同一个(共享)对象并假设 DerivedClassSomeHandler 派生自 BaseClassSomeHandler,在这种情况下您应该使用 boost::shared_static_cast,如 here 所述.

this apparently related question 中也有一些很好的信息.

关于C++ - 智能指针 - 通过模板将派生类共享指针传递给基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com