【发布时间】:2011-03-10 03:06:33
【问题描述】:
我想知道是否可以从 boost::function 继承。
基本上,为了便于使用,我想 有一个“委托”类型,它基本上是一个 boost::function。 这只是为了在我正在编写的一些代码中易于使用。
我曾一度将 boost::function 类型定义为 Delegate,但根据我的经验,typedef 对 gdb 的东西非常不利。特别是如果它是模板化的,所以我想避免这种情况(曾经尝试调试已经被 typdeffed 的 stl 容器?oofta)。
我在网上找到了一些代码,其中给出了一些示例:
template<class Signature>
class Delegate : public boost::function<Signature>
{
public:
using boost::function<Signature>::operator();
};
现在,当我尝试使用它时,我遇到了一些错误。 一个使用示例是:
Tank * tankptr = new Tank();
Delegate<void ()> tankShoot(boost::bind(boost::mem_fn(&Tank::Shoot),tankptr));
这会产生诸如
之类的错误error: no matching function for call to ‘Delegate<void ()()>::Delegate(boost::_bi::bind_t<boost::_bi::unspecified, boost::_mfi::mf0<void, Tank>, boost::_bi::list1<boost::_bi::value<Tank*> > >)’
Delegate.h:26: note: candidates are: Delegate<void ()()>::Delegate()
Delegate.h:26: note: Delegate<void ()()>::Delegate(const Delegate<void()()>&)
如果我不得不猜测为什么会出现这些错误,我不得不说这是因为我错过了 某种复制构造函数,它采用 boost::bind 构造函数返回的任何基数。
关于如何克服这个障碍的任何想法,或者任何能够指出我的好例子的人 从 boost::function 继承?
【问题讨论】:
标签: c++ inheritance boost