0

我有一个 boost::makevariantover。如何将其转换为 vector 。使用 boost::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());

在哪里

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

2 回答 2

2

代替 .vbuffer() 调用 .array(),它已经应用了/a 访问者“为你”

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

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

于 2016-04-08T10:38:56.713 回答
1

我们不知道您的像素缓冲区类型是什么。

无论如何,如果您知道如何将它们转换为向量,您可以简单地从访问者的呼叫运算符返回它:

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);
于 2016-04-08T10:20:07.013 回答