Map.emplace с множественными аргументами C ++ 17 - PullRequest
0 голосов
/ 02 мая 2018

Использование C ++ 17:

using working_t = bool;
std::map<std::thread, working_t> _pool;

Я пытаюсь добавить новый поток на эту карту, но не могу найти приличный синтаксис ..

class ThreadPool {
   std::map<std::thread, working_t> _pool;

   void init() {
      _pool.emplace(&ThreadPool::thread_init, this, false);
   }
   void thread_init();
};

Это должно добавить поток на карту со значением false, но не может скомпилировать. Возможно ли это?

1 Ответ

0 голосов
/ 02 мая 2018

Вам нужно:

_pool.emplace(
    std::piecewise_construct,
    std::forward_as_tuple(&ThreadPool::thread_init, this),
    std::forward_as_tuple(false)
);

... чтобы различать списки аргументов для ключа и значения. Затем вы столкнетесь с проблемой, что std::thread не имеет operator <, но это для другого вопроса:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...