考虑以下片段:
class Foo {
public:
Foo( int Value );
// other stuff
};
std::list< boost::shared_ptr< Foo > > ListOfFoo = list_of( 1 )( 2 )( 3 )( 4 )( 5 );
这不是开箱即用的。使这项工作最简单的方法是什么,或者是否有任何方法可以将值分配给 ListOfFoo
如此简单?
最佳答案
boost::assign::ptr_list_of
让你构建一个 Boost pointer container使用非常简单的语法。您可以通过私有(private)继承来扩展它,这样您就可以创建 shared_ptr
的容器:
template< class T >
struct shared_ptr_list : boost::assign_detail::generic_ptr_list<T>
{
typedef boost::assign_detail::generic_ptr_list<T> Base;
template< class Seq >
operator Seq() const
{
Seq result;
for(typename Base::impl_type::iterator it = Base::values_.begin(), e = Base::values_.end(); it != e; ++it)
result.push_back(typename Seq::value_type(&*it));
Base::values_.release().release();
return result;
}
template< class U >
shared_ptr_list& operator()( const U& u )
{
return (shared_ptr_list&)boost::assign_detail
::generic_ptr_list<T>::operator()(u);
}
};
template< class T, class U >
shared_ptr_list<T> shared_ptr_list_of( const U& t )
{
return shared_ptr_list<T>()(t);
}
虽然看起来有点丑,但是用起来真的很方便:
int main()
{
using boost::shared_ptr;
std::deque<shared_ptr<Foo> > deq = shared_ptr_list_of<Foo>(1)(2)(3);
}
关于c++ - 在 shared_ptr 集合上使用 boost.assign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266203/