Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。


10
C ++ 0x没有信号量?如何同步线程?
C ++ 0x会没有信号量是真的吗?关于信号量的使用,在堆栈溢出方面已经存在一些问题。我一直使用它们(posix信号量)让一个线程在另一个线程中等待某个事件: void thread0(...) { doSomething0(); event1.wait(); ... } void thread1(...) { doSomething1(); event1.post(); ... } 如果我要用互斥锁来做到这一点: void thread0(...) { doSomething0(); event1.lock(); event1.unlock(); ... } void thread1(...) { event1.lock(); doSomethingth1(); event1.unlock(); ... } 问题:这很丑陋,不能保证thread1首先锁定互斥锁(鉴于同一线程应该锁定和解锁互斥锁,因此您也不能在thread0和thread1启动之前锁定event1)。 因此,由于boost也没有信号量,实现以上目标的最简单方法是什么?

16
检查类是否具有给定签名的成员函数
我要一个模板技巧来检测一个类是否具有给定签名的特定成员函数。 这个问题类似于一个引用在这里 http://www.gotw.ca/gotw/071.htm ,但不一样的:在萨特的书的项目,他回答的问题是C类必须提供带成员函数特定签名,否则程序将无法编译。在我的问题中,如果一个类具有该功能,则需要执行某些操作,否则执行“其他操作”。 boost :: serialization面临着类似的问题,但我不喜欢它们采用的解决方案:模板函数默认情况下调用具有特定签名的自由函数(必须定义),除非您定义特定的成员函数(在他们的情况下,“序列化”使用两个具有给定类型的参数(带有特定签名),否则会发生编译错误。那就是要实现介入式和非介入式序列化。 我不喜欢该解决方案,原因有两个: 要成为非侵入式,您必须覆盖boost :: serialization名称空间中的全局“序列化”功能,以便您可以在客户端代码中打开名称空间boost和名称空间序列化! 解决该混乱的堆栈是10到12个函数调用。 我需要为没有该成员函数的类定义一个自定义行为,并且我的实体位于不同的名称空间中(并且我不想覆盖在一个名称空间中定义的全局函数,而在另一个名称空间中) 你能给我一个解决这个难题的提示吗?
135 c++  c++11  templates  sfinae 

1
期货与承诺
我将自己与未来和承诺之间的差异弄混了。 显然,它们具有不同的方法和内容,但是实际用例是什么? 是吗?: 当我管理一些异步任务时,我使用future来获取“ future”的值 当我是异步任务时,我使用promise作为返回类型,以允许用户从我的promise中获得未来
134 c++  c++11  promise  future 

3
packaged_task和async有什么区别
在使用C ++ 11的线程模型时,我注意到 std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; 和 auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; 似乎做的完全一样。我知道,如果std::async与一起跑步,可能会有很大的不同std::launch::deferred,但是在这种情况下,有没有区别? 这两种方法之间有什么区别,更重要的是,我应该在哪种用例中使用一种而不是另一种?

6
如何将自定义删除器与std :: unique_ptr成员一起使用?
我有一个具有unique_ptr成员的课程。 class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar是具有create()函数和destroy()函数的第三方类。 如果我想std::unique_ptr在独立功能中使用它,我可以这样做: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } 有什么办法可以std::unique_ptr作为班级成员吗?


1
-std = c ++ 11和-std = gnu ++ 11有什么区别?
gcc和clang -std=c++11和-std=gnu++11as作为编译参数有什么区别?与c99和有相同的问题gnu99吗?我了解C ++和C标准,这是我感兴趣的参数差异。 我在某处读到它与某些扩展有关,但是对于一个新项目,我不清楚哪个扩展以及如何在一个或另一个之间进行选择。
132 c++  gcc  c++11  clang 


10
C ++ 11中的线程池
相关问题: 关于C ++ 11: C ++ 11:std :: thread池化了吗? 为了避免昂贵的线程创建,C ++ 11中的async(launch :: async)是否会使线程池过时? 关于Boost: C ++ Boost线程重用线程 boost :: thread并创建它们的池! 我如何获得一个线程池以将任务发送到,而不是一遍又一遍地创建和删除它们?这意味着持久线程无需加入即可重新同步。 我有看起来像这样的代码: namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += 2; } } int main(int argc, char *argv[]) { …


6
为什么std :: shared_ptr <void>工作
我发现一些代码使用std :: shared_ptr在关机时执行任意清理。起初,我认为此代码可能无法工作,但随后尝试了以下操作: #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() { std::cout &lt;&lt; "At begin of main.\ncreating std::vector&lt;std::shared_ptr&lt;void&gt;&gt;" &lt;&lt; std::endl; std::vector&lt;std::shared_ptr&lt;void&gt;&gt; v; { std::cout &lt;&lt; "Creating …
129 c++  c++11  shared-ptr 


2
功能标题中的箭头运算符(->)
我遇到以下代码: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } 我无法理解的一件事是: 在哪里可以找到箭头-&gt;标题()在函数标题中的含义?我完全从逻辑上猜测,-&gt;运算符确定auto要推导的类型,但是我想弄清楚这一点。我找不到任何信息。
128 c++  c++11  auto  decltype 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.