2016-04-08 19 views
0

Ben bir boost :: makevariantover var. Bunu bir vektöre nasıl dönüştürebilirim. Herhangi örnekler yararlı kullanarak boost ::Nasıl boost :: Makevariantover vektör dönüştürmek için

typedef boost::make_variant_over<pixel_buffer_types>::type  pixelBuffer; 
+0

Neyin bir vektörü? Ne sahip olduğunuzu ve ne istediğinizi gösteren kodu (küçük ama eksiksiz) sağlayabilir misiniz? – VolkerK

+0

@VolkerK Yayını güncelledim. Şu anda bu desteklemeyi öğrenmeye çalışıyorum apply_visitor. Nasıl çalıştığına dair hiçbir fikrim yok. Boost :: makevariant'ı bir çift vektöre dönüştürmeye çalışıyorum. Görüntünün piksel verilerini tutar –

+0

Hala aradığınızdan emin değilsiniz. "pixelBuffer testi" (yazım hatası düzeltildiğinde) tek bir değerdir. Bu tek değerden ne tür bir vektör yaratmak istersiniz? Tam olarak ne buf.vbuffer() 'döner? (Belgelerine bağlanabilir misiniz?) – VolkerK

cevap

1

Biz pixelbuffer türleridir bilmiyorum apply_visitor

class pixel_visitor 
    : public boost::static_visitor<> 
{ 

public: 

template <typename T> 
    void operator() (const ome::compat::shared_ptr<PixelBuffer<T> >& v) 
    { 
     std::cout << std::real(v); 
    }  
}; 

pixelBuffer test= buf.vbuffer();  
test.apply_visitor(&pixel_visitor()); 

olacaktır. Ne olursa olsun

, sen, sadece ziyaretçinin çağrı operatöründen o geri dönebilirler vektörlere olanlar dönüştürmek için nasıl biliyorsanız: ör Yani

class pixel_visitor 
    : public boost::static_visitor<std::vector<WhatEverYouWant> > 
{ 

public: 

template <typename T> 
    result_type operator() (const ome::compat::shared_ptr<PixelBuffer<T> >& v) 
    { 
     std::vector<WhatEverYouWant> result; 
     // do your conversion here 
     return result; 
    }  
}; 

yapabilirsiniz Bunun yerine .vbuffer ait

std::vector<WhatEverYouWant> applied; 

applied = boost_apply_visitor(pixel_visitor(), test); 
+0

OP'nin aldığı "şey" .vbuffer() işlevi bir "typedef boost :: make_variant_over :: type", yani tek bir varyanttır. Bence bu yanlış bir yöntem ;-) Zaten bir ziyaretçiyi uygulayan bir dizi '' 'yöntemi var. – VolkerK

+0

Evet, bunun için üzgünüm. array(), piksel verilerine doğrudan erişim sağlar. Bahşiş için teşekkürler. Bunları dönüştürmeyi deneyeceğim :) –

+0

@VolkerK dizisi zaten bir ziyaretçi kullanıyor? Ben bu bölüm –

2

() zaten applies the/a visitor "for you",) (it .array çağırır: ham türü için

template<typename T> 
inline typename PixelBuffer<T>::array_ref_type& 
VariantPixelBuffer::array() 
{ 
    detail::VariantPixelBufferVisitor<T> v; 
    return boost::apply_visitor(v, buffer).array(); 
} 

veya .Data().

+1

Ya bu yüzden şunu alabilirim: array() çağrısı kullanarak çoklu dizi ::. Doğru mu? –

+0

[Benzeri] (http://downloads.openmicroscopy.org/bio-formats-cpp/5.1.0/api/classome_1_1bioformats_1_1PixelBuffer.html#a99a634a844ea4a3e62b8ecc449e101af). – VolkerK

İlgili konular