我正在使用带有 Visual C++ 2010 的并发运行时,并且对parallel_invoke和task_group(PPL 或并行模式库的一部分)的功能感兴趣。我希望能够通过函数对象(而不是 lambda 函数或函数指针)启动两个并行操作,但由于错误,我无法编译代码:
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 做什么感兴趣,虽然有 lambda 函数和函数指针的示例,但我找不到或创建任何具有函数对象的示例,这些函数对象不仅仅是并行的“Hello World”。我正在寻找真正利用函数对象的东西,如果可能的话,还有并发容器。