Boost logo

Boost Users :

Subject: [Boost-users] [function] How to use function with templated member functions
From: Christian Henning (chhenning_at_[hidden])
Date: 2011-12-05 23:38:15


Hi there, I would like to boost::function with a templated member
function. Please consider the following code:

struct my_reader
{
    my_reader(bool full)
    {
        if( full )
        {
            _read_function = &my_reader::read_full<int>;
        }
        else
        {
            _read_function = &my_reader::read_partial<int>;
        }
    }

    void read()
    {
        _read_function(this);
    }

private:

    template< typename T >
    void read_full()
    {
        std::cout << "reading full image" << std::endl;
    }

    template< typename T >
    void read_partial()
    {
        std::cout << "reading partial image" << std::endl;
    }

    boost::function<void (my_reader*)> _read_function;
};

int main(int argc, char* argv[])
{
    my_reader r(false);
    r.read();

        return 0;
}

This doesn't compile with Visual Studio 2010 since the compiler cannot:

"cannot convert from 'overloaded-function' to 'boost::function<Signature>'"

Is there is way to make this happen?

Regards,
Christian


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