c++ - 在 shared_ptr 集合上使用 boost.assign

标签 c++ stl boost

考虑以下片段:

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/

相关文章:

c++ - 使用 OpenCV 和 caffe 编译时未定义对 `g_mutex_lock' 的引用

c++ - MinGW 的大型算术失败

c++ - 我自定义使用 std::unordered_map 的性能非常慢

c++ - 交换 std::list 中的相邻元素

c++ - 使用 Boost.Polygon 对曼哈顿多边形进行切片

c++ - 将 std::bind 与 boost::signals2 一起使用是否安全?

c++ - 应该在策略模式中使用安全指针吗?

c++ - 加快双倍到有理数的转换

c++ - STL算法删除容器中的所有对象?

c++ - 如何使用boost C++解析8位十六进制数和字符串?