Say I have a function as follows:

template< typename t_packet >
void Subscribe( boost::function<void (t_packet const&)> func )
{
    // gSignal is a boost::signal somewhere. Assume valid.
    gSignal.connect( func );
}


And in some other function, I invoke Subscribe() as follows:

void MyCallback( WalkPacket const& p )
{
}

void MainTest()
{
    Subscribe( &MyCallback );
}


The code above will actually not compile, since the template parameter t_packet cannot be deduced. Is there a way I can make the template deduction work?