草庐IT

language-binding

全部标签

c++ - 在 C++ 中将多个参数绑定(bind)到成员函数

假设我有课A具有成员函数intf(){returnm_;}其中m_是一个数据成员。我有一个vector称为vec,我想找到最大m_的对象vec中的值使用std::max_element.我可以用lambda来做:autocmp=[](A&x,A&y){returnx.f()有没有bind(或某些类似的)技巧可以让我在没有lambda的情况下做到这一点并且无需从头开始定义我自己的比较器?请不要建议更好的方法来解决最大查找问题。这只是一个例子。一般的问题是如何包装一个接受多个参数的函数对象(例如,std::less,我将在上面的示例中用作比较器),以便发送给它的参数通过其他函数(或成员函数

c++ - CMake 错误 : CMake can not determine linker language for target: myapp

我正在尝试通过cmake编译vMime,但出现上述错误,我正在使用cmake的图形界面,我的makefiles.txt在下面。它配置正确但不生成cmake_minimum_required(VERSION2.8)PROJECT(CXX)#vmimeenable_language(CXX)set(VerifyCXXVerifyCXX.cxx)add_definitions(-DVERIFY_CXX)set_target_properties(${TARGET}PROPERTIESLINKER_LANGUAGECxx)add_executable(myappvmime)install(TA

c++ - 如何使用 C++11 std::bind 绑定(bind)类中同名的成员函数之一

classTest{public:intwork(){coutf=std::bind(&Test::work,&test);threadth(f);th.join();return0;}如上代码,我想绑定(bind)一个类的成员函数voidwork(void)(暂且命名为Test),但是出现编译器错误提示无法确定使用哪个重写函数。我无法更改类Test,因为它属于一个库,如何实现我的目标?提前致谢! 最佳答案 为什么不完全跳过std::bind而使用lambda?autofp=[&t](){t.test()};作为奖励,您的可执行文件

c++ - 无法将左值绑定(bind)到右值引用

这个问题在这里已经有了答案:passingrvalueraisescannotbindtolvalue(1个回答)关闭12个月前。我有这个C++测试代码片段,#includeclassA{std::vectorx;public:A(std::vector&&_x):x(_x){}};classB{Aa;public:B(std::vector&&_x):a(/*move(*/_x/*)*/){}};我将_x作为右值引用传递给B,但在传递给A的构造函数时它被转换为左值,我必须使用std::move()使其工作。我的问题是为什么_x是左值而不是a()中的右值引用?

c++ - 帮助理解 boost::bind 占位符参数

我正在阅读StackOverFlow上一篇关于按对的第二个元素对vector对进行排序的帖子。最明显的答案是创建一个谓词,但一个使用boost的答案引起了我的注意。std::sort(a.begin(),a.end(),boost::bind(&std::pair::second,_1)::second,_2));我一直在试图弄清楚boost::bind是如何工作的,或者至少只是如何使用它,但我无法弄清楚占位符参数_1和_2的目的是什么,以及boost文档根本不会陷进去。谁能解释一下boost::bind的具体用法?附言原题:HowdoIsortavectorofpairsbasedo

c++ - 传递并调用一个成员函数(boost::bind/boost::function?)

我有一个可能非常简单的问题:传递和调用类中的成员函数。我知道我想使用BOOST绑定(bind)(和或函数),但我还没有真正掌握它的概念。下面的代码编译和执行有问题。但是当我想将“f3”函数更改为非静态类函数时,乐趣就开始了:#include#include#include#includeclassTest{public:voidf1();private:voidf2(void(*callfunc)(uint32_t));staticvoidf3(uint32_tx);};voidTest::f1(){f2(f3);}voidTest::f2(void(*callfunc)(uint32

c++ - 删除 boost::bind 的原始指针参数

假设我已经分配了堆A*,我想将其作为参数传递给boost::bind。boost::bind被保存在某些STL中以供以后处理,例如boost::functions的容器。我想确保A*在STL容器销毁时被销毁。演示:A*pA=newA();//sometimelatercontainer.push_back(boost::bind(&SomeClass::HandleA,this,pA);//sometimelatercontainerisdestroyed=>pAisdestroyedtoo如何实现?编辑也许我想要的并不是那么现实。我有原始指针和接收原始指针的函数。通过boost::b

c++ - 如何实现自动插入隐含占位符的 easy_bind()?

我最近在网上发现了这个漂亮的片段-它允许您无需显式传递占位符即可进行绑定(bind):templatestd::functioneasy_bind(ReturnType(*MemPtr)(Args...)){return[=](Args...args)->ReturnType{return(*MemPtr)(args...);};}此版本在没有参数的情况下运行良好:autof1=easy_bind((std::string(*)(A&,A&))&Worker::MyFn);稍后调用:std::strings=f1(*p_a1,*p_a2);问题是否可以修改代码以处理最多n个参数,用占位

c++ - boost 绑定(bind)编译错误

classA{boolOutofRange(string&a,string&b,stringc);voidGet(vector&str,string&a,string&b);}voidA::Get(vector&str,string&a,string&b){str.erase(std::remove_if(str.begin(),str.end(),BOOST_BIND(&A::OutOfRange,a,b,_1)),str.end());}我收到如下错误:Error7errorC2825:'F':mustbeaclassornamespacewhenfollowedby'::'Fil

c++ - boost::bind() 是按引用还是按值复制参数?

为什么valgrind的DRD工具提示“Conflictingloadbythread...atsize4”:关于这样的代码:voidSomeFunction(constint&value){boost::bind(...,value);/*boost::bind()是按引用还是按值存储值? 最佳答案 按值(value)。1但你可以做到copybyref相反:voidSomeFunction(constint&value){boost::bind(...,boost::ref(value));boost::bind(...,boos