我有兩種類型的std :: unique_ptr,它們被保存在boost :: variant中。我試圖編寫一個boost :: static_visitor的子類,以提取一個const引用到底層對象,我boost :: variant模板化的兩個unique_ptr變體。設置看起來是這樣的:使用boost :: visitor與unique :: _ ::的一個boost ::變體
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爲對象的升壓::變種成員變量的實例。但是,當我嘗試使用上述訪問者訪問變體類型時,編譯器會抱怨它無法執行,因爲unique_ptr不是可複製構造的。
您是否嘗試接受參考? – krzaq