Tag: c ++ 11

绑定与Lambda?

我有一个关于哪种风格是首选的问题:std :: bind Vs lambda in C ++ 0x。 我知道他们服务于某些不同的目的,但让我们举一个相交function的例子。 使用lambda : uniform_int<> distribution(1, 6); mt19937 engine; // lambda style auto dice = [&]() { return distribution(engine); }; 使用bind : uniform_int<> distribution(1, 6); mt19937 engine; // bind style auto dice = bind(distribution, engine); 我们应该select哪一个? 为什么? 假设比上述例子更复杂的情况。 ie一个人的优点和缺点是什么?

在C ++ 11中用“auto”推导出什么是lambda的types?

我有一个感觉,lambda的types是一个函数指针。 当我进行下面的testing时,我发现它是错误的( 演示 )。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上面的代码是否缺less任何一点? 如果不是那么,用auto关键字推导出lambdaexpression式的types是什么?

C ++ 11:我可以从多个参数到元组,但我可以从元组去多个参数?

可能重复: 如何将元组展开成可变参数模板函数的参数? “解包”一个元组来调用一个匹配的函数指针 在C ++ 11模板中,有没有一种方法可以将元组用作(可能是模板)函数的单独参数? 例: 比方说我有这个function: void foo(int a, int b) { } 我有tuple auto bar = std::make_tuple(1, 2) 。 我可以用它来模仿foo(1, 2)吗? 我不是简单的foo(std::get<0>(bar), std::get<1>(bar))因为我想在一个不知道参数个数的模板中做这个。 更完整的例子: template<typename Func, typename… Args> void caller(Func func, Args… args) { auto argtuple = std::make_tuple(args…); do_stuff_with_tuple(argtuple); func(insert_magic_here(argtuple)); // <– this is the hard part } 我应该注意到,我宁愿不创build一个模板,适用于一个参数,另一个适用于两个,等等…

如何用cmake检测c ++ 11编译器的支持

如果编译器支持C ++ 11,有没有办法让cmake自动检测? 因为在cmake运行期间通知用户将不会编译代码,因为编译器不支持C ++ 11。 此刻,我设置了C ++ 11标志,但是如果编译器不支持它,用户在cmake运行期间将得到编译错误而不是错误。 完美会像find_package()那样工作,但是我还没有find任何提供所需function的函数模块。 另外,如果编译器需要标记std=c++0x或std=c++11那么这个function将会很好。 有没有可用的东西,还是我需要自己开发? 这里有一些代码我使用到目前为止,但它只适用于GNU gcc编译器。 如果会有更通用的解决scheme,那将会很好。 if(CMAKE_COMPILER_IS_GNUCXX) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7) message(STATUS "C++11 activated.") add_definitions("-std=gnu++11") elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3) message(WARNING "C++0x activated. If you get any errors update to a compiler which fully supports […]

线程池在C + + 11

相关问题 : 关于C ++ 11: C + + 11:std ::线程池? C ++ 11中的async(launch :: async)是否会使线程池过时,以避免昂贵的线程创build? 关于Boost: C ++ boost线程重用线程 boost ::线程并创build它们的池! 我如何获得一个线程池来发送任务 ,而不是一遍又一遍地创build和删除它们? 这意味着持久线程不join就重新同步。 我有这样的代码: 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[]) { for (int i […]

std :: next_permutation实现说明

我很好奇如何std:next_permutation被实现,所以我提取了gnu libstdc++ 4.7版本,并消毒标识符和格式,以产生以下演示… #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; –i; while (true) { It j = i; –i; if (*i < *j) { It […]

用c ++ 11等价物replaceboost :: thread和boost :: mutex是否明智?

动机:我考虑的原因是我的天才项目经理认为提升是另一个依赖,它是可怕的,因为“你依靠它”(我试图解释提升的质量,然后放弃了一段时间:( )。为什么我想要做的更小的原因是我想学习c ++ 11的特性,因为人们会开始编写代码,所以: 在#include<thread> #include<mutex>和boost等价物之间是否存在1:1映射? 你会考虑一个好主意,用c + + 11replace提升的东西 东东。 我的用法是原始的,但有没有例子时,标准不提供什么提升呢? 或者(亵渎)反之亦然? PS我使用GCC所以标题在那里。

基于C ++ 11范围的循环:按值或引用const获取项目

阅读一些基于范围的循环的例子,他们提出了两种主要的方法1,2,3,4 std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } 要么 for (auto x : vec) { // Value of x is copied from an item of vec // We can not change vec's items by […]

没有匹配的C + + 11正则expression式

为什么在g ++(Debian 4.6.3-1)4.6.3或clang version 3.2(trunk 159457)中找不到匹配项 #include <iostream> #include <string> #include <regex> using namespace std; int main() { string line("test"); regex pattern("test",regex_constants::grep); smatch result; bool ret(false); ret = regex_search(line,result,pattern); cout << boolalpha << ret << endl; cout << result.size() << endl; return 0 ; } 产量 false 0

委托构造函数C ++

我做对了吗? 我试图委托一个C ++类的构造函数,因为它基本上是相同的代码重复3次..我读了C + + x11和读取,g ++ 4.7.2允许这个,但我不知道如果我这样做对: Bitmap::Bitmap(HBITMAP Bmp) { //Construct some bitmap stuff.. } Bitmap::Bitmap(WORD ResourceID) { HBITMAP BMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ResourceID), IMAGE_BITMAP, 0, 0, LR_SHARED); Bitmap(BMP); //Delegates to the above constructor? Or does this create a temporary? } 或者我需要这样做: Bitmap::Bitmap(HBITMAP Bmp) { //Construct some bitmap stuff.. } Bitmap::Bitmap(WORD ResourceID) : Bitmap((HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ResourceID), […]