Так как тип функционального объекта, сгенерированного boost::bind
(и std::bind
), не указан, вы должны сделать PostWorkToThread
шаблоном:
template< typename Fun >
void PostWorkToThread( Fun xxx )
{
// Enqueue xxx for execution
}
Кроме того, вы можете использовать boost::function
(или std::function
), чтобы стереть тип объекта функции:
void PostWorkToThread( boost::function< void() > const& xxx )
{
// Enqueue xxx for execution
}
Примечание что в этом случае boost::function
(и std::function
), возможно, придется динамически распределять память для хранения объекта функции. Однако вам, вероятно, придется все равно сделать это, чтобы поставить функцию в очередь для выполнения, так что это, вероятно, не проблема.