假设我有两个std::vector<uint_32> a, b;我知道具有相同大小的向量.
是否有一个C++ 11范式做一个bitwise-AND所有成员之间a和b,并把结果std::vector<uint_32> c;?
我有一个调用lambda的工作函数模板.
我想概括这个函数模板来获取可变参数并将它们完美地转发到lambda中,但是我无法编译这段代码.
我正在使用gcc 4.7.2.
UPDATE
使用R. Martinho Fernandes的建议,我查找了bugzilla中的错误 - 它看起来像一个已经存在一段时间的bug.如果有人知道一个解决方法(我现在正在挖掘一个),请发一个答案 - ty.
错误
junk.cpp: In lambda function:
junk.cpp:32:68: error: parameter packs not expanded with ‘...’:
junk.cpp:32:68: note: ‘args’
junk.cpp: In instantiation of ‘std::pair<std::basic_string<char>, typename T::Lambda> MP(const string&, M, Args&& ...) [with T = Integer; M = int (Integer::*)()const; Args = {}; typename T::Lambda = std::function<std::function<int()>(const Integer&)>; std::string = std::basic_string<char>]’:
junk.cpp:47:42: required from here
junk.cpp:34:2: error: using invalid field ‘MP(const string&, M, Args&& ...)::<lambda(const T&)>::__args’
make: *** [junk] Error 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试建立一些启发式方法来帮助我确定std::thread要使用的适当类.
据我了解,从最高级别(最简单到使用,但最不灵活)到最低级别,我们有:
我想我对何时使用前两个有一个很好的把握,但我仍然不清楚std::promise.
std::future与std::async调用一起,有效地将生成的回调/函数/ lambda转换为异步调用(根据定义,它立即返回).一个单一的消费者可以拨打std::future::get()阻止电话,以获得结果.
std::shared_future 只是一个允许多个消费者的版本.
如果要将std::future值与生成器回调绑定,但希望将实际调用推迟到以后(将任务关联到生成线程时),std::packaged_task则是正确的选择.但是现在,由于对应std::future于std::package_taskcan,在一般情况下,可以由多线程访问,我们可能必须小心使用a std::mutex.请注意std::async,在第一种情况下,我们不必担心锁定.
阅读了一些关于承诺的有趣链接,我想我理解它的机制以及如何设置它们,但我的问题是,你什么时候会选择使用其他三个承诺呢?
我正在寻找一个应用程序级别的答案,比如一个经验法则(填写上面的???),而不是链接中的答案(例如使用std :: promise来实现一些库机制),所以我可以更容易地解释如何为初级用户选择合适的类std::thread.
换句话说,这将是很好有什么我可以用做一个有用的例子std::promise是不能与其他机制来完成.
回答
A std::future是一种奇怪的野兽:一般来说,你不能直接修改它的值.
可以修改其价值的三个生产者是:
std::async通过异步回调,它将返回一个std::future实例.std::packaged_task,当传递给线程时,将调用其回调,从而更新std::future与之关联的实例std::packaged_task.此机制允许生成器的早期绑定,但稍后调用.std::promise,允许std::future通过其 …我一直在使用CMake和C++来构建库和可执行文件,并希望将其用于go编程语言.
我需要采取哪些步骤来配置CMake才能使用go编程语言?
基本上,我的编译器是6g,它产生一个编译的foo.6.我通过6l foo.6将它发送到一个链接器,我就完成了.我已经构建并安装了编译器和链接器.
显然,我可以为此编写一个简单的Makefile,但在整个项目中使用CMake会很好.
TIA提供任何可以帮助我入门的建议.
我有一个运行三种状态的模拟器:
有没有搞错! 在标准测试期间,CPU使用率从100%下降到20%,总运行时间比正常时间长30倍(130秒与4.2秒).
当Callgrind没有发现任何可疑的事情时,我的头嗡嗡作响,因为我正在回到最后一次提交的悬崖上,失去了所有的错误修复.
气馁,我在跑步期间走进服务器机房,注意到讨厌的磨音,后来验证是由于/ proc/PID/fd中的 Mysql套接字写入造成的!事实证明,第2阶段深层的几层Mysql代码导致了问题.
得到教训
修复 我将在ReadAllowed()和WriteAllowed()上引入线程本地存储IOSentinels和asserts(),以确保Stage 2线程永远不会执行任何IO.
任何人都有幸与googletest附加/编写基准测试框架?
不幸的是,这次我的所有googletests都通过了.如果我稍稍离开并在没有注意到运行时间的情况下回来,这将是一个灾难性的提交,并且可能更难修复.
如果运行时间超过上次运行时的2或3倍,我希望googletest失败:这最后一部分很棘手,因为对于非常快速的运行,系统状态可能导致某些事情需要两倍的时间但仍然可以.但是对于长时间的模拟运行/测试,我不希望运行时间变化很大(> 50%会不常见).
我对这里的建议持开放态度,但是对于自动化测试进行低维护检查会很好,所以即使所有输出看起来都没问题,系统突然变慢也很明显.
我试图返回int64_tif std::is_integral<>::value是真的.
否则,我想打电话to_int64t()给对象.
我在下面的尝试失败,因为不允许部分特殊化功能模板.
码
#include <type_traits>
#include <cstdint>
template<class T,bool is_integral_type>
int64_t to_int64t( const T& t )
{
return t;
}
template<class T>
int64_t to_int64t<T,std::is_integral<T>::value>( const T& t )
{
return t;
}
template<class T>
int64_t to_int64t<T,!std::is_integral<T>::value>( const T& t )
{
return t.to_int64t();
}
int main()
{
int64_t i = 64;
auto x = to_int64t( i );
}
Run Code Online (Sandbox Code Playgroud) 有没有办法去除一个std::tuple<T...>以便让它回来T...?
例
假设vct<T...>是一个预先存在的 可变参数类模板,
using U = std::tuple<int,char,std::string>;
using X = vct<int,char,std::string>;
using Y = vct< strip<U> >; // should be same as X
Run Code Online (Sandbox Code Playgroud)
笔记
我知道std :: tuple_element,但我需要所有元素,以一种可用的形式T...
作为参考,我发现这个问题,这是类似的,但我的需求是较为简单(所以我希望有一个简单的解决方案):我需要的是那些在类型列表tuple-我不关心tuple实例的实际值.
这只是一个学术问题(我不会在实际代码中这样做):
如果我在我的代码中普遍使用shared_ptr <>,那么行为是否等同于Java之类的gc收集语言?
如果不是,行为将如何与gc嵌入式语言不同?与gc嵌入式语言相比,哪种C++构造会产生相同的行为?
注意:在实际编码中,我更倾向于使用RAII和严格的所有权来使用任何智能指针.我也知道其他不太通用的指针,unique_ptr <>会更有效率.这个问题只是对智能指针等价的一个问题.
当我将代码转换为C++ 11时,我非常希望将我的pthread代码转换为std :: thread.但是,我似乎在drd和helgrind中的非常简单的程序中获得了错误的竞争条件.
#include <thread>
int main(int argc, char** argv)
{
std::thread t( []() { } );
t.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Helgrind输出片段 - 我在drd中也遇到类似的错误,在Ubuntu 11.11 amd64上使用gcc 4.6.1,valgrind 3.7.0.
我的问题是:
我不愿意将大量代码从pthread移植到std::threadhelgrind/drd等一些关键工具.
==19347== ---Thread-Announcement------------------------------------------
==19347==
==19347== Thread #1 is the program's root thread
==19347==
==19347== ---Thread-Announcement------------------------------------------
==19347==
==19347== Thread #2 was created
==19347== at 0x564C85E: clone (clone.S:77)
==19347== by 0x4E37E7F: do_clone.constprop.3 (createthread.c:75)
==19347== by 0x4E39604: pthread_create@@GLIBC_2.2.5 (createthread.c:256)
==19347== by 0x4C2B3DA: pthread_create_WRK (hg_intercepts.c:255)
==19347== …Run Code Online (Sandbox Code Playgroud) 在c ++ 11的当前状态(比如gcc 4.7.2)中,我应该如何选择使用variadic-template还是std::initializer_list需要可以接受变量参数的构造函数?
c++ ×9
c++11 ×7
templates ×3
algorithm ×1
benchmarking ×1
binding ×1
cmake ×1
go ×1
googletest ×1
java ×1
lambda ×1
libstdc++ ×1
std ×1
stdthread ×1
type-traits ×1