
Hi Robert, You only have to supply one template parameter because the others will be deduced. The first template parameter is the same as for istream_iterator, it is the 'int' in your case. On Tue, Oct 21, 2008 at 8:54 AM, Robert Jones <robertgbjones@gmail.com>wrote:
Hi All
I'd really appreciate an example of the use of istream_range from the Boost.Range library.
I tried this
#include <iostream> #include <iterator> #include "boost/range.hpp" #include "boost/range/istream_range.hpp" #include "boost/range/algorithm.hpp"
void f( int i ) { std :: cout << i << std :: endl; }
int main( ) {
This is incorrect...
typedef std :: istream_iterator< int > in; boost :: for_each( boost :: istream_range< in >( std :: cin ), f );
It is even easier than that... boost::for_each(boost::istream_range<int>(std::cin), f);
return 0; }
and other variations, but I don't think any of them are right! Do I really have to specify three template type parameters? The signature of the template is
<snip> </snip> And an example would be my super hurried test code that i haven't submitted yet because it needs tidying: #include <string> #include <sstream> #include <boost/range/istream_range.hpp> namespace boost { inline void test_istream_range() { std::string data("test"); std::vector<char> reference; std::istringstream reference_s(data); std::copy(std::istream_iterator<char>(reference_s), std::istream_iterator<char>(), std::back_inserter(reference)); std::vector<char> test; std::istringstream test_s(data); copy(istream_range<char>(test_s), std::back_inserter(test)); BOOST_CHECK( reference == test ); } } // namespace boost Thanks, Rob.
_______________________________
You are very welcome. I hope this helps. Let me know how you get on. Best Wishes, Neil Groves