1

在我的项目中,我使用 boost::shared_ptr,在一个头文件中,我写道:

typedef boost::shared_ptr<boost::lockfree::spsc_queue<PacketsInput, boost::lockfree::capacity<4096> > > queue_ptr;

在另一个源文件中,我使用它:

std::vector<queue_ptr> v;
for (...)
    v.push_back(boost::make_shared(/* #1 */));

在 #1 中,我想写 queue_ptr 的指向类型,而不是

boost::lockfree::spsc_queue<PacketsInput, boost::lockfree::capacity<4096> >

多久了!

但是boost::shared_ptr里面没有typedef,我找到的只有一个typedef:typedef typename boost::detail::sp_element< T >::type element_type;但是不知道怎么用。

有什么帮助吗?坦克很多!

4

2 回答 2

5

文档说有一个名为 typedef 的成员element_type

这个示例程序运行良好(断言通过):

#include <boost/shared_ptr.hpp>
#include <boost/type_traits.hpp>
#include <cassert>

int main()
{
    bool b =  boost::is_same<boost::shared_ptr<int>::element_type, int>::value;
    assert(b);
}

给定你已经声明的 typedef,你可以像这样使用它:

typedef queue_ptr::element_type elem_type;
v.push_back( boost::make_shared<elem_type>( /* args for ctor */ ) );
于 2013-08-09T11:18:09.133 回答
1

你可以使用两个 typedef

   typedef boost::lockfree::spsc_queue<PacketsInput, boost::lockfree::capacity<4096> > my_queue;
   typedef boost::shared_ptr<my_queue> my_queue_ptr;

然后你可以使用my_queuein make_shared

于 2013-08-09T11:14:59.773 回答