草庐IT

boost-move

全部标签

c++ - boost::unordered_map 是……有序的?

我有一个boost::unordered_map,但它看起来是有序的,给我一种“你做错了”的强烈感觉。为什么这个输出是有序的?我本以为底层的哈希算法会随机化这个顺序:#include#includeintmain(){boost::unordered_mapim;for(inti=0;i::const_iteratori;for(i=im.begin();i!=im.end();++i){std::coutfirstsecond...给我...0,01,12,2...47,4748,4849,49在检查boost的源代码时:inlinestd::size_thash_value(int

c++ - boost::enable_if 不在函数签名中

这只是一个关于样式的问题:我不喜欢C++的模板元编程方式,它要求您使用返回类型或为SFINAE的技巧添加额外的虚拟参数。所以,我想到的是将SFINAE放在模板参数定义本身中,如下所示:#include#include#includeusingnamespacestd;template>::type>voidasd(){cout>::type>voidasd(){cout();asd();}这个例子让g++提示:../src/afg.cpp:10:97:error:redefinitionof‘templatevoidasd()’SFINAE本身可以工作,因为如果我删除例如带有disab

c++ - boost 日志 : How to prevent the output will be duplicated to all added streams when it uses the add_file_log() function?

我使用add_file_log()函数来初始化一个日志接收器,它将日志记录存储到一个文本文件中。当我定义多个接收器时,我观察到:为每个接收器创建一个文件。输出被复制到所有文件。这是我的记录器:classlogger{public:logger(constlogger&)=delete;logger(logger&&)=delete;logger&operator=(constlogger&)=delete;logger&operator=(logger&&)=delete;staticlogger&get_instance(conststd::string&file,boolconso

c++ - 如何杀死或终止 boost 线程

我想终止或杀死boost线程。代码在这里:DWORDWINAPIStartFaceDetector(LPVOIDtemp){intj=0;char**argv1;QApplicationa(j,argv1);//addsomethreadheregui::VisualControlw;t=&w;boost::threadu(&faceThread);w.show();a.exec();//IWanttocloseuthreadhere.return0;}我想在函数返回之前关闭那个boost线程。提前致谢。 最佳答案 在Windows

c++ - 将对象作为函数参数发送时 move 语义

我在玩move构造函数和move赋值时偶然发现了这个问题。第一段代码:#include#includeclassFoo{public:Foo(){}Foo(Foo&&other){value=std::move(other.value);other.value=1;//sinceit'sint!}intvalue;private:Foo(constFoo&other);};voidBar(Foo&&x){std::cout在我看来,当我使用:Bar(std::move(foo));程序应将foo对象“move”到使用Bar函数中的move构造函数创建的临时对象。这样做会使foo对象的值

c++ - 未定义对 'boost::system::generic_category()' 的引用?

看来我看不到明显的东西。我想为我的项目使用一些Boost库功能,并且知道我突然遇到了这些好错误:LinkingCXXexecutableATFORCMakeFiles/ATFOR.dir/stdafx.cc.o:Infunction__static_initialization_and_destruction_0(int,int)':stdafx.cc:(.text+0x3c):undefinedreferencetoboost::system::generic_category()'stdafx.cc:(.text+0x48):undefinedreferencetoboost::s

c++ - boost 的 dijkstra_shortest_paths 中的负边权重检查

我正在使用boost图形库调用dijkstra_shortest_paths。但是,我有一些特殊的设置,因为weight_map实际上是一个仿函数。因此,每当boost库需要边的权重时,我的仿函数就会被调用,进行复杂的计算并将结果返回给boost。不幸的是,在dijkstra_shortest_paths.hpp结构dijkstra_bfs_visitor的方法examine_edge中有一个get调用weightmap,只检查返回值是否为负数。我完全清楚我不能将Dijkstra算法与负值一起使用,并且我确信我的仿函数只返回正值。但是,此检查会导致我的仿函数在每条边上被调用两次。因为它

c++ - std::vector 是否满足 Boost.Interprocess 分配器的容器要求?

在boost::interprocess文档中,它被认为是容器存储在共享内存中的要求:STL容器可能不会假设用分配器分配的内存可以用相同类型的其他分配器释放。仅当分配给一个对象的内存可以与另一个分配时,所有分配器对象必须比较相等,并且这只能在运行时使用operator==()进行测试。容器的内部指针应该是allocator::pointer类型,并且容器不能假定allocator::pointer是原始指针。所有对象都必须通过allocator::construct和allocator::destroy函数构造-销毁。我正在使用带有-std=c++11(和boost1.53)的gcc4

c++ - 为什么抛出局部变量调用 moves 构造函数?

最近,我“玩”了右值以了解它们的行为。大多数结果并没有让我感到惊讶,但后来我看到如果我抛出一个局部变量,就会调用move构造函数。在那之前,我认为move语义规则的目的是保证对象只有在编译器可以检测到它不再被使用(如在临时对象中)时才会move(并变得无效),或者用户promise不使用它(如std::move)。但是,在下面的代码中,这些条件都不成立,我的变量仍在move(至少在g++4.7.3上)。这是为什么?#include#includeusingnamespacestd;intmain(){strings="blabla";try{throws;}catch(...){cou

c++ - Boost.Build/bjam 和 Qt

我正在尝试设置一个Boost.Build.jamroot文件来编译Qt4.8项目,但它似乎忽略了应该被moc:ed的.ui文件和.cpp文件。我试着在qt4.jam内部四处寻找,添加了更多ECHO:s,但我不确定该去哪里找。例如,uic-generator的run方法似乎没有被调用(init被调用),但我认为它应该被调用。我的jamroot文件看起来像这样:importqt4;if![qt4.initialized]{ECHO"ohnooo";}importcast;exeapplication:#Forexample[cast_moccable-cpp:./src/something