boost :: bind в качестве аргумента, чтобы принять функцию с n аргументами и использовать ее при дальнейших вызовах функций - PullRequest
1 голос
/ 23 января 2020

Могу ли я сделать что-то вроде ниже? Возможно ли это или есть обходной путь?

..
PostWorkToThread( boost::bind(func_x, arg1) );
PostWorkToThread( boost::bind(func_y, arg1, arg2) );
PostWorkToThread( boost::bind(func_z, arg1, arg2, arg3) );
..


void PostWorkToThread( boost::bind xxx )
{
    PostWork( boost::bind(xxx) ); or
    PostWork( xxx );
}

Спасибо, я ценю ваше предложение.

1 Ответ

0 голосов
/ 23 января 2020

Так как тип функционального объекта, сгенерированного boost::bindstd::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::functionstd::function), возможно, придется динамически распределять память для хранения объекта функции. Однако вам, вероятно, придется все равно сделать это, чтобы поставить функцию в очередь для выполнения, так что это, вероятно, не проблема.

...