Как устранить неоднозначность в функции, переданной в Boost Thread - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу создать новый поток, используя boost, функция RenderOut является членом класса BlueOut.

функция перегружена и как мне разрешить эту неоднозначность при передаче ее в поток boost.

void BlueOut::RenderOut( int i);
void BlueOut::RenderOut( std::string str);

BlueOut blueout;
boost::thread* thr = new boost::thread(boost::bind ( &BlueOut::RenderOut , &blueout ));

1 Ответ

1 голос
/ 01 ноября 2019

Чтобы выбрать функцию-член из набора перегрузки, приведите указатель функции-члена к нужному типу. Таким образом, чтобы выбрать int версию, используйте это:

static_cast<void (BlueOut::*)(int)>(&BlueOut::RenderOut);

Чтобы выбрать std::string версию, используйте это:

static_cast<void (BlueOut::*)(std::string)>(&BlueOut::RenderOut);

Используя это в вашем примере, вынапишите это:

// you didn't specify which overload you wanted so I chose `int` because I have no idea
boost::thread* thr = new boost::thread(
  boost::bind(
    static_cast<void (BlueOut::*)(int)>(&BlueOut::RenderOut), 
    &blueout
  )
);

Тот же принцип работает и для свободных функций и статических функций. С учетом этих функций:

void RenderOut(int);
void RenderOut(std::string);

Вы можете выбрать int версию с этим:

static_cast<void(*)(int)>(&RenderOut);

... и выбрать std::string версию с этим:

static_cast<void(*)(std::string)>(&RenderOut);

Подробнее об этом можно прочитать на cppreference .

...