使用boost :: visitor和unique_ptr的boost :: variant

时间:2016-10-21 18:47:06

标签: c++ c++11 boost unique-ptr boost-variant

我有两种类型的std :: unique_ptr,它们保存在boost :: variant中。我正在尝试编写boost :: static_visitor的子类来提取对底层对象的const引用我的boost :: variant被模板化的两个unique_ptr变体。设置看起来像这样:

using bitmap_flyweight_t = boost::flyweights::flyweight<allegro_bitmap_t>;
using image_bitmap_flyweight_t = boost::flyweights::flyweight<boost::flyweights::key_value<const char*, allegro_bitmap_t>>;

class bitmap_visitor : public boost::static_visitor<allegro_bitmap_t>
{
public:
    const allegro_bitmap_t& operator()(const std::unique_ptr<bitmap_flyweight_t> bitmap_ptr) const
    {
        return bitmap_ptr.get()->get();
    }

    const allegro_bitmap_t& operator()(const std::unique_ptr<image_bitmap_flyweight_t> bitmap_ptr) const
    {
        return bitmap_ptr.get()->get();
    }
};

我可以使用移动语义在实例化时将unique_ptrs放入对象的boost :: variant成员变量中,没有编译器投诉。但是,当我尝试使用上面的访问者访问变体类型时,编译器会抱怨它不能这样做,因为unique_ptr不是可复制构造的。

1 个答案:

答案 0 :(得分:2)

接受对唯一指针的const引用。

BindType<derived>()

这是玩具项目的live demo