我有两种类型的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不是可复制构造的。