|
Boost Users : |
Subject: [Boost-users] Using boost function input iterator with class member functions
From: Michael King (wmichaelking1_at_[hidden])
Date: 2011-09-04 22:29:39
Hello,
I am trying to use a class member function in conjunction with boost's
function input iterator, and am having trouble coming up with a solution
which can in any way be considered elegant...
My initial thought process was to do something like :
std::copy(
// does not work because the functor (1st arg to make_function_input
iterator ) cannot be temporary... or something like that
boost::make_function_input_iterator(boost::bind(&My_Class::my_function,
0)),
boost::make_function_input_iterator(boost::bind(&My_Class::my_function,
10)),
std::ostream_iterator<result_type>(std::cout, " ")
);
However, this fails as noted above.
Thus, i had to look at some compiler error messages in order to figure out
the return type of boost::bind and create some boost::bind object producing
the working code below, however, this looks pretty terrible.
Can anyone suggest a more convenient solution to the problem I am trying to
solve?
Thanks,
Michael King
#include<iostream>
#include<iterator>
#include<boost/bind.hpp>
#include<boost/iterator/function_input_iterator.hpp>
class foo {
public:
typedef double result_type;
result_type return_random() const { return drand48(); }
};
int main() {
foo bar;
// found type from compiler error message...
boost::_bi::bind_t<
double,
boost::_mfi::cmf0<
double,
foo>,
boost::_bi::list1<
boost::_bi::value<foo>
>
> f = boost::bind(&foo::return_random, bar);
std::copy(
boost::make_function_input_iterator(f, 1),
boost::make_function_input_iterator(f, 10),
std::ostream_iterator<double>(std::cout, "\n")
);
return 0;
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net