Я использую Concurrency Runtime с Visual C ++ 2010 и мне интересны возможности parallel_invoke и task_group (части PPL или Parallel Patterns Library ). Я хотел бы иметь возможность запускать два параллельных действия через функциональные объекты (а не лямбда-функции или указатели функций), но я не могу заставить код компилироваться из-за ошибки:
error C3848: expression having type 'const C' would lose some const-volatile qualifiers in order to call 'void C::operator ()(void)'
Но если я сделаю C :: operator () () const, то я потеряю много преимуществ функционального объекта, а именно то, что его состояние является изменяемым и поддерживается внутри между вызовами. Я что-то здесь упускаю? Есть ли способ, которым я мог бы вызывать объекты неконстантных функций параллельно?
Кстати, я понимаю, что могу использовать библиотеку Asynchronous Agents Library и извлечь классы из класса Concurrency :: agent, но учтите, что это выходит за рамки этого вопроса (частично из-за отсутствие обработки исключений и параметров отмены).
Мне просто интересно, что я могу сделать с PPL, и хотя есть примеры с лямбда-функциями и указателями на функции, я не смог найти или создать какие-либо примеры с объектами функций, которые делают больше, чем параллельный «Hello World» ». Я ищу что-то, что действительно использует в своих интересах функциональные объекты, и, если возможно, также параллельные контейнеры.