如何将助推::Makevariantover转换为矢量

How to convert boost::Makevariantover to vector

本文关键字:转换 Makevariantover      更新时间:2023-10-16

我有一个提升::makevariantover。如何将其转换为矢量。任何样本都将有助于使用boost::apply_viewer

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());

其中

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

它已经为您应用/a访问者,而不是.vbuffer()调用.array():

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

或用于原始类型的.data()。

我们不知道您的pixelbuffer类型是什么。

无论如何,如果你知道如何将这些转换为矢量,你可以简单地从访问者的呼叫运营商返回:

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;
    }    
};

所以你可以例如

std::vector<WhatEverYouWant> applied;
applied = boost_apply_visitor(pixel_visitor(), test);