模板类的enable_shared_from_this需要怎么搞

old-six-programmer 2014-03-24 05:12:17

普通类从enable_shared_from_this继承没有问题


class Test : public boost::enable_shared_from_this<Test>


如果本身是一个模板类,boost是否支持?如果支持,要怎么声明?


template<class T>
class Test : public boost::enable_shared_from_this</*???*/>


多谢!
...全文
430 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
old-six-programmer 2014-03-27
  • 打赏
  • 举报
回复
不好意思,是我自己乌龙了,创建对象没有使用shared_ptr,惭愧!
nini2005 2014-03-24
  • 打赏
  • 举报
回复
我的神,天书啊
qq120848369 2014-03-24
  • 打赏
  • 举报
回复
改成: return TSP(obj, boost::bind(&ObjectPool<T>::FreeObject, this->shared_from_this(), _1)); 试试。
old-six-programmer 2014-03-24
  • 打赏
  • 举报
回复
使用以下两种方式调用shared_from_this编译没有问题:

return TSP(obj, boost::bind(&ObjectPool<T>::FreeObject, ObjectPool<T>::shared_from_this(), _1));

return TSP(obj, boost::bind(&ObjectPool<T>::FreeObject, boost::enabled_shared_from_this<ObjectPool<T> >::shared_from_this(), _1));
但是,运行就会coredump: terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> >' what(): tr1::bad_weak_ptr 已放弃 (core dumped) 应该是weak_ptr没有正确设置。
old-six-programmer 2014-03-24
  • 打赏
  • 举报
回复
有试过这样,不过,shared_from_this()会有告警:

xxx.hpp : 在成员函数‘BroadInter::ObjectPool<T>::TSP BroadInter::ObjectPool<T>::AllocObject()’中:
xxx.hpp:126:75: 警告:‘shared_from_this’的实参不依赖模板参数,所以‘shared_from_this’的声明必须可用 [-fpermissive]
  return TSP(obj, boost::bind(&ObjectPool<T>::FreeObject, shared_from_this(), _1));
这个该如何解决?
飞天御剑流 2014-03-24
  • 打赏
  • 举报
回复
public boost::enable_shared_from_this< Test< T > >

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧