草庐IT

c++ - std::function 复制构造函数是否要求模板类型参数类型是完整类型?

给定:#includeclassworld_building_gun;classtile_bounding_box;typedefstd::functionworldgen_function_t;voidfoo(){worldgen_function_tv;worldgen_function_tw(v);}这应该编译吗?我的编译器说:是:GCC/stdlibc++(在GCC和Clang中boost::function也是yes)否:Clang/libc++(http://libcxx.llvm.org/,Clang3.0,截至今日的libc++SVN)(如果“否”是正确答案,我将修复我

c++ - 将表示二维数组的 std::vector<std::vector <double>> 转换为 cv::Mat

将std::vector的嵌套std::vector转换为cv::Mat的最优雅和最有效的方法是什么>?嵌套结构包含一个数组,即所有内部std::vector具有相同的大小并表示矩阵行。我不介意将数据从一个复制到另一个。我知道一个单一的、非嵌套的std::vector很容易,有一个构造函数:std::vectormyvec;cv::Matmymat;//fillmyvecboolcopy=true;myMat=cv::Mat(myvec,copy);嵌套vector呢? 最佳答案 我的变体(需要OpenCV2.4):intsize=

c++ - std::string::c_str() 如何返回不会导致内存泄漏或未定义的 c 字符串内容的 c 字符串?

我正在为家庭作业编写一个类似于std::string的字符串类,但我无法弄清楚如何返回一个不会导致内存泄漏并保证保持不变的c字符串,直到它不再使用。我目前有:constchar*string::c_str(){charc[_size+1];strncpy(c,_data,_size);c[_size]='\0';returnc;}但是内容在调用后不久就被覆盖了。如果我进行动态分配,我要么会发生内存泄漏,要么在任何时候给定字符串中只能存在一个c字符串。我怎样才能避免这种情况? 最佳答案 但是c_str指向的字符串只有在std::str

c++ - 迭代器或指针的 std::enable_if 或 SFINAE

我想为MyClass编写一个带有参数的构造函数,并且我希望仅当参数是一个pointer或iterator(具有iterator_traits的东西)。如何实现? 最佳答案 遗憾的是,没有标准的方法来检测类是否为Iterator模型。最简单的检查是*it和++it在语法上都是有效的;您可以使用标准SFINAE技术执行此操作:template(),void(),++std::declval(),void())>MyClass(T);考虑到24.2.2:2中的Iterator要求:templatetypenamestd::enable_i

c++ - 我们是否应该在大型 std::vector 中存储指向类实例的智能指针以获得更好的性能?

当在std::string中存储自定义类(不是“简单”类,例如不是std::complex,不是std::vector等)的大量实例时,我们应该选择一个简单的std::vector还是std::vector>是更好的选择?我写了一些基准代码(从thisblogpost扩展代码,关于C++11在C++03上move语义改进),似乎vector>为1,500,000项vector提供了更好的性能。事实上,在装有Windows764位、IntelCorei5四核CPU和8GBRAM的PC上,我得到了以下结果(test.exe1500):vector>:1.5秒vector>:1.6秒vect

c++ - 无法跨 DLL 传递 std::wstring

我在VisualStudio2010中建立了一个项目来针对现有的MFCDLL编写单元测试。我正在使用单header单元测试框架,并链接到单元测试项目中的MFCDLL库包装器。我正在尝试构建一个采用std::wstring的类在它的构造函数中。这是我的测试结果:TEST_CASE("MyProject/MyTest","Dothetest."){MockDbServicemockDbService;Foobarfoo(L"{F00DFACE-FEED-DEAD-BEEF-C0FFEEDECADE}",mockDbService);foo.loadObject();REQUIRE(mock

c++ - 标准::线程 C++。更多线程相同数据

我使用的是VisualStudio2012和C++11。我不明白为什么这不起作用:voidclient_loop(bool&run){while(run);}intmain(){boolrunning=true;std::threadt(&client_loop,std::ref(running));running=false;t.join();}在这种情况下,线程t的循环永远不会结束,但我明确地将running设置为false。run和running有相同的位置。我试图将running设置为单个全局变量,但没有任何反应。我也试图传递一个指针值,但什么也没有。线程使用同一个堆。我真的不

c++ - unordered_map - {{key,value},{key,value}} 语法无效

我正在尝试编译thecodetakenfromhere//constructingunordered_maps#include#include#includetypedefstd::unordered_mapstringmap;stringmapmerge(stringmapa,stringmapb){stringmaptemp(a);temp.insert(b.begin(),b.end());returntemp;}intmain(){stringmapfirst;//emptystringmapsecond({{"apple","red"},{"lemon","yellow"}}

c++ - 我应该看到 std::bind 和 boost::bind 之间的显着差异吗?

我正在探索g++-4.7(具体来说是Ubuntu/Linaro4.7.3-2ubuntu~12.04)对C++11的支持,我似乎发现了差异。特别是,如果我注释掉#include并系统地替换出现的boost::bind与std::bind在BoostASIO异步客户端示例中(取自http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/client/async_client.cpp),程序不再编译。有什么解释吗? 最佳答案 #includenamespa

c++ - 我们什么时候应该为 `std::unordered_set` 提供我们自己的哈希函数

当我编译下面的代码时,我看到了与Hash相关的错误。intF_no_meaningA(unordered_set>&setVec,vector&vec){setVec.insert(vec);return1;}intmain(){vectorW{2,3,7};unordered_set>setVec;}$g++--versiong++(Ubuntu/Linaro4.6.3-1ubuntu5)4.6.3$g++$1.cpp-o$1-g-Wall-Weffc++-pedantic-std=c++0x/tmp/ccCQFQ4N.o:Infunction`std::__detail::_Has