Как конвертировать boost :: Makevariantover в вектор

У меня есть импульс :: makevariantover. Как я могу преобразовать это в вектор. Любые примеры будут полезны при использовании 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;

0

Решение

Мы не знаем, какие у вас типы пиксельных буферов.

В любом случае, если вы знаете, как преобразовать их в векторы, вы можете просто вернуть это из оператора вызова посетителя:

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

Другие решения

Вместо .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 () для необработанного типа.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector