草庐IT

boost-lambda

全部标签

c++ - 具有 lambda 的多态访问者

我想在不实现类的情况下使用lambda实现多态访问者。我已经有了一定的基础,但正在为我的lambda表达式的参数进行类型推导而苦苦挣扎。假设我有一些遗留代码库,它决定像这样对多态类型使用类型标签:enumclassClassType{BaseType=0,TypeA,TypeB};classBaseType{public:virtual~BaseType(){}ClassTypegetType()const{returntype;}protected:ClassTypetype;};classTypeA:publicBaseType{public:staticconstClassTyp

c++ - 使用 boost::property_tree::ptree 将注释写入 ini 文件

有什么方法可以使用boost::property::ptree在ini文件中写入注释吗?类似的东西:voidsave_ini(conststd::string&path){boost::property_tree::ptreept;intfirst_value=1;intsecond_value=2;//Writeacommenttodescribewhatthefirst_valueisherept.put("something.first_value",);//Writeasecondcommentherept.put("something.second_value",second

c++ - 检查类型是否可以作为 boost::lexical_cast<string> 的参数

我有以下特征类(IsLexCastable)来检查是否可以通过调用boost::lexical_cast将类型转换为字符串.它错误地返回true对于vector.#include#include#include#include#include#includeusingnamespacestd;usingnamespaceboost;namespacestd{///AddingtostdsincethesearegoingtobepartofitinC++14.templateusingenable_if_t=typenamestd::enable_if::type;}templates

c++ - lambda 对象 + c 回调 sigsegv

如果我像这样实现C回调:register_callback([](/*someargs*/){/*somestuff*/});当它触发时我得到一个SIGSEGV,但是如果我这样注册它:autoconstf([](/*someargs*/){/*somestuff*/});register_callback(f);然后它工作正常。(对我而言)特别感兴趣的是地址sanitizer产生的堆栈跟踪:ASAN:SIGSEGV===================================================================22904==ERROR:Address

将 shared_ptr 传递给 lambda 时的 C++ 内存管理

考虑以下C++代码:voidf(std::functionfunc){func();}voidg(std::shared_ptrmyObjPtr){myObjPtr->someMethod();}voidh(std::shared_ptrmyObjPtr){f([=](){g(myObjPtr);});}有没有内存泄漏?我的理解是myObjPtr被复制到lamba中并增加了它的引用计数。然后它被复制到g()中,引用计数再次递增。g()完成后,shared_ptr的引用计数会减少。然后在f()中执行func()之后,shared_ptr的引用计数再次减少。所以我认为这段代码使引用计数保持

C++ 如何在 Boost Global Logger 上设置严重性过滤器

几天来我一直在尝试创建一个BoostGlobalLogger以在整个应用程序中使用但我似乎无法在GlobalLogger中设置严重性级别。重要提示:在下面查看Andrey的回答...它被标记为步骤(a)和(b),但我仍然没有做对!直接来自Boost文档here...itwouldbemoreconvenienttohaveoneorseveralgloballoggersinordertoeasilyaccessthemineveryplacewhenneeded.Inthisregardstd::coutisagoodexampleofsuchalogger.Thelibrarypr

c++ - 为什么成员函数尝试 block 处理程序中的 lambda(捕获 'this')不能访问 VC++ 2013 中的私有(private)数据成员?

与thisquestionaboutstaticinitializers不同但可能相关.前两个函数编译良好,最后一个函数在vc++中不编译,但在clang和gcc中编译:classA{protected:std::stringprotected_member="yay";public:voidwithNormalBlock();voidwithFunctionBlock();voidnoLambda();};voidA::withNormalBlock(){try{throwstd::exception();}catch(...){[this](){std::coutinclang(好

c++ - Boost any_range 与 "canonical form"- 后者是什么?

Boost的any_range文档说明如下:Despitetheunderlyingany_iteratorbeingthefastestavailableimplementation,theperformanceoverheadofany_rangeisstillappreciableduetothecostofvirtualfunctioncallsrequiredtoimplementincrement,decrement,advance,equaletc.Frequentlyabetterdesignchoiceistoconverttoacanonicalform.作者所说的

c++ - boost::make_shared 导致访问冲突

我有一个用于ARMV4IWindowsMobile6的VisualStudio2008C++应用程序,我正在使用boost::shared_ptr管理一个相当大的对象(4KB)。不幸的是,boost::make_shared导致访问冲突异常。我的代码:structFoo{chara[4*1024-1];};int_tmain(intargc,_TCHAR*argv[]){boost::shared_ptrf=boost::make_shared();//AccessViolationreturn0;}异常调用栈:test.exe!boost::detail::sp_ms_deleter

c++ - 如何在不使用 C++0x 的情况下创建 lambda 函数来匹配 boost::function 参数?

如何使用boost或STL创建lambda函数以匹配中第三段代码中F期望的boost::function参数主?#include#includevoidF(inta,boost::functionf){std::cout我不能使用C++0x并且想避免创建几个单独的函数。如果有帮助,我可以使用boost::function以外的东西,我的首要任务是简洁地创建lambda。 最佳答案 #include//STL#include//Boost.Lambda#include//Boost.Pheonix#include//Boost.Phe