我正在尝试使用 boost 中的 apply_visitor 将 variablepixelbuffer.vbuffer() 转换为双值向量。
到目前为止,我一直使用这段代码:
struct GetVector : public boost::static_visitor<std::vector<double>>
{
//values will be returned in a pair. double is
// used since it can contain the value for any pixel type
typedef std::vector<double> result_type;
template<typename T
void myfunction (const T& i) { // function:
result_type.push_back(static_cast<double>(*i));
}
template<typename T>
result_type
operator() (const T& v)
{
typedef typename T::element_type::value_type value_type;
std::for_each (v->data(), v->data() + v->num_elements(), myfunction);
return result_type;
}
};
/* pixel-example-start */
void
readPixelData(const FormatReader& reader,
std::ostream& stream,int x,int y,int w,int h)
{
// Change the current series to this index
reader.setSeries(0);
// Get total number of planes (for this image index)
dimension_size_type pc = reader.getImageCount();
// Pixel buffer
VariantPixelBuffer buf;
dimension_size_type xd = x;
dimension_size_type yd = y;
dimension_size_type wd = w;
dimension_size_type hd = h;
// Loop over planes (for this image index)
for (dimension_size_type p = 0 ; p < pc; p++)
{
// Read the entire plane into the pixel buffer.
reader.openBytes(p, buf,xd,yd,wd,hd);
}
GetVector visitor;
GetVector::result_type result = boost::apply_visitor(visitor, buf.vbuffer());
}
但是我遇到了一些很长的错误,其中一些是
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:60:43:
'typename Visitor::result_type boost::apply_visitor(Visitor&, Visitable&) [with Visitor = MinMaxVisitor; 可访问 = boost::variant >, boost::mpl::v_item >, boost::mpl::v_item, boost::mpl::v_item >, boost::mpl::v_item >, boost::mpl::v_item >, boost::mpl::v_item , boost::mpl::v_item , boost::mpl:: v_item , boost::mpl::v_item
detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant:: void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail: :variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail: :variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::变量::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost ::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::变量::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost ::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '.' 或 '-> ' 来调用 '__f (...)' 中的指向成员函数,例如 '(... ->* __f) (...)'</p>
我该如何解决这个问题,我需要将像素缓冲区数据转换为 vector 。