Ich habe zwei Arten von std :: unique_ptr, die innerhalb einer boost :: Variante gehalten werden. Ich versuche, eine Unterklasse von boost :: static_visitor zu schreiben, um eine const-Referenz auf das zugrundeliegende Objekt zu extrahieren, auf das die beiden unique_ptr-Varianten, auf die meine boost :: variant basiert, gestempelt werden. Das Setup sieht wie folgt aus:Boost :: Besucher mit einem boost :: Variante von 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();
}
};
Ich bin in der Lage, die unique_ptrs in ein Objekt der boost :: variant Membervariable auf Instanziierung bewegen Semantik zu setzen, gibt es keine Compiler Beschwerden. Wenn ich jedoch versuche, mit dem obigen Besucher auf den Variant-Typ zuzugreifen, beklagt sich der Compiler, dass dies nicht möglich ist, da unique_ptr nicht kopierbar ist.
Haben Sie versucht, eine Referenz zu akzeptieren? – krzaq