在实现构造函数采用以下构造函数的模板类时:
std::function
)std::binary_function
,我将使用它将向量的应用结果从1)累加到某个值。我希望能够使用std::plus()
和std::multipies()
作为第二个模板参数,但问题是,根据函数的不同,我需要一个相应的中性元素(用于std accumulate init值)。对于和
(std::multipies
),我需要true
(又名1
),对于或
(std::plus
),我需要false
(又名0
)。我知道我可以只对模板进行专门化并解决问题,但我想知道是否有一种方法可以为内置的STL函数获得中性元素。
如果您使用的是gcc
,那么就可以使用__gnu_cxx::identity_element,它完全符合您的要求。
如果您不是,我不认为有一个通用的解决方案,就好像有,gcc
就不会实现它们自己的--您可能只是重写它们的实现(正如您所期望的那样,这实际上只是两个模板专门化)。
编辑:这方面的源代码在这个文件的第78-98行。
并行开发挺复杂的,特别是在试图用好线程和锁的过程中。如果要用到条件变量或std-atomics(一种无锁开发方式),那就更复杂了。C++0x提供了future和promise来简化任务线程间的返回值操作;同时为启动任务线程提供了packaged_task以方便操作。其中的关键点是允许2个任务间使用无(显式)锁的方式进行值传递;标准库帮你高效的做好这些了。基本思路很简单:当一个任务需要向父线程(启动
标准库函数bind()和function()定义于头文件<functional>中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int
我在理解条件变量及其在互斥体中的使用时遇到了一些困难,我希望社区能帮助我。请注意,我来自win32背景,因此与CRITICAL_SECTION、HANDLE、SetEvent、WaitForMultipleObject等一起使用。 这是我第一次尝试使用C++11标准库进行并发操作,它是在这里找到的一个程序示例的修改版本。 关于这个的几个问题。 我读过“任何要等待std::condition_var
两者之间有实际区别吗 和 ? 看起来包含常量元素的非常量数组仍然无法交换,赋值运算符也不起作用<我什么时候应该选择一个而不是另一个?
我需要弄清楚lock和condition_variable是如何工作的。 在这里略有修改的cplusplusreference代码中 我感到困惑的是,如果worker_thread已经锁定了互斥体,主线程如何锁定它。 我不明白为什么在这种情况下会出现“运行时错误”。
要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。