
Hi there my compiler doesn't like binding the gil::at_c function. I'm using MSVC 7.1 SP1. Please correct if I'm wrong but I think you need to supply a function pointer cast for overloaded function when using this compiler. But for some reasons I cannot make it happen. template < typename CHANNEL > void set_zero( CHANNEL c ) { c = 0; } int main() { rgb8_image_t src; bmp_read_image( ".\\flower.bmp", src ); typedef channel_type<rgb8_pixel_t>::type return_t; add_reference<return_t>::type (*AA)( rgb8_pixel_t& ) = &gil::at_c<0>; for_each( view( src ).begin() , view( src ).end() , bind( &set_zero, bind( AA, _1 ))); return 0; } compiler error is: \gil\repos\gil_2\libs\gil\toolbox\test.cpp(74) : error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'boost::add_reference<T>::type (__cdecl *)(boost::gil::rgb8_pixel_t &)' with [ T=boost::gil::bits8 ] None of the functions with this name in scope match the target type Thanks ahead, Christian

Seems that my questions got unnoticed. I still haven't found a solutiont bind gil::at_c() yet. But also for gil::dynamic_at_c() it is not working. As a workaround I created the code below. But still maybe somebody knows how to do it. Thanks, Christian using namespace std; using namespace boost; using namespace gil; template< typename CHANNEL , typename COLORBASE > inline CHANNEL& get_channel_0( COLORBASE& cb ) { return gil::at_c<0>( cb ); } template < typename CHANNEL > inline void set_zero( CHANNEL& c ) { c = 0; } int main() { rgb8_image_t src; bmp_read_image( ".\\flower.bmp", src ); typedef channel_type<rgb8_pixel_t>::type channel_t; typedef channel_t& (*AA)( rgb8_pixel_t& ); typedef void (*BB)( channel_t& ); for_each( view( src ).begin() , view( src ).end() , bind( static_cast<BB>( &set_zero ) , bind( static_cast<AA>( &get_channel_0<channel_t> ), _1 ))); bmp_write_view( ".\\flower_no_red_channel.bmp" , view( src )); return 0; } On 4/29/07, Christian Henning <chhenning@gmail.com> wrote:
Hi there my compiler doesn't like binding the gil::at_c function. I'm using MSVC 7.1 SP1. Please correct if I'm wrong but I think you need to supply a function pointer cast for overloaded function when using this compiler. But for some reasons I cannot make it happen.
template < typename CHANNEL > void set_zero( CHANNEL c ) { c = 0; }
int main() {
rgb8_image_t src; bmp_read_image( ".\\flower.bmp", src );
typedef channel_type<rgb8_pixel_t>::type return_t; add_reference<return_t>::type (*AA)( rgb8_pixel_t& ) = &gil::at_c<0>;
for_each( view( src ).begin() , view( src ).end() , bind( &set_zero, bind( AA, _1 )));
return 0; }
compiler error is:
\gil\repos\gil_2\libs\gil\toolbox\test.cpp(74) : error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'boost::add_reference<T>::type (__cdecl *)(boost::gil::rgb8_pixel_t &)' with [ T=boost::gil::bits8 ] None of the functions with this name in scope match the target type
Thanks ahead, Christian
participants (1)
-
Christian Henning