草庐IT

language-binding

全部标签

c++ - 绑定(bind) lambda 的速度(通过 std::function)与仿函数结构的 operator()

autolam=[](inta,intb,intc){returna在版本一中,我们std::vector>lamvals;//getparametersandforeachlamvals.emplace_back(std::bind(lam,a,std::placeholders::_1,b));替代方案是std::vectorlamvals;//getparametersandforeachlamvals.emplace_back(functor{a,b});在这两种情况下我们都有一个简单的迭代returnstd::any_of(lamvals.cbegin(),lamvals.c

c++ - 如何结合使用 std::bind 和 std::shared_ptr

我需要经常做这样的事情:AsyncOperation*pAsyncOperation=newAsyncOperation();autobindOperation=std::bind(&AsyncOperation::operator(),std::ref(*pAsyncOperation));std::threadthread(bindOperation);thread.join();AsyncOperation是实现operator()(也称为函数对象)的任何自定义类。是否可以指示std::bind使用std::shared_ptr而不是std::ref?这将防止内存泄漏,而无需我保

c++ - std::bind() - 从派生类的成员函数中获取基保护成员函数

我想从派生类bind()到我的基类版本的函数。该功能在基础中被标记为protected。当我这样做时,代码在Clang(AppleLLVM编译器4.1)中编译愉快,但在g++4.7.2和VisualStudio2010中都出现错误。错误如下:“'Base::foo':不能访问protected成员。”这意味着引用的上下文实际上在bind()中,当然函数在其中被视为protected。但是bind()不应该继承调用函数的上下文——在本例中是Derived::foo()——因此将基方法视为可访问的?下面的程序说明了这个问题。structBase{protected:virtualvoidf

c++ - const 上的结构化绑定(bind)

下面的代码可以编译吗?#includevoidfoo(){conststd::pairx={1,2};auto[a,b]=x;static_assert(std::is_const_v);static_assert(std::is_const_v);}MSVC说“是的!”。GCC说“哦,不,伙计!”。Clang说“不行!”。那么,这是MSVC错误吗?这里的标准并不简单(我快速浏览了一下),但考虑到auto的规则,我想,a和b应该被复制并丢弃cv-qualifier。 最佳答案 Isthefollowingcodesupposedto

c++ - std::bind 类成员函数

我有这个代码:#include#includestructFoo{intget(intn){return5+n;}};intmain(){Foofoo;autoL=std::bind(&Foo::get,&foo,3);std::cout似乎是这样的:autoL=std::bind(&Foo::get,&foo,3);相当于:autoL=std::bind(&Foo::get,foo,3);为什么? 最佳答案 std::bind()按值接受其参数。这意味着在第一种情况下,您将按值传递一个指针,从而得到一个指针的拷贝。在第二种情况下,

未能安装包“Microsoft.VisualStudio.MinShell.Msi.Resources,version=15.0.26228.0,language=en-US”。

我在安装VisualStudio2017的【通用Windlows平台开发】和【使用C++的桌面开发】组件时分别报错:未能安装包“Microsoft.VisualStudio.MinShell.Msi.Resources,version=15.0.26228.0,language=en-US”。未能安装包“Microsoft.VisualStudio.Community.Msi.Resources,version=15.0.26228.0,language=en-US”。查看日志文件如下:安装出现问题。可通过以下方式排查包故障问题:1.使用以下搜索URL来搜索针对每个包故障的解决方案2.针对受与

c++ - 你如何将 boost::bind 对象传递给函数?

我有一个一维函数最小化器。现在我正在向它传递函数指针。然而,许多函数有多个参数,其中一些参数是固定的。我已经使用像这样的仿函数实现了这个templateminimize(T&f){}Functorf(param1,param2);minimize(f);然而,仿函数定义有很多问题。Boost::bind看起来更干净。这样我就可以:minimize(boost:bind(f,_1,param1,param2))但是我不清楚我的minimize声明应该喜欢使用boost::bind。boost::bind是什么类型的对象?是否有一个简单的模式可以避免仿函数的样板,但允许多个参数绑定(bin

c++ - 为什么 C++ 左值对象不能绑定(bind)到右值引用 (&&)?

move语义的想法是您可以从另一个临时对象(由右值引用引用)中获取所有内容并将该“所有内容”存储在您的对象中。这有助于避免在事物的单一构造就足够的情况下进行深度复制——因此您在右值对象中构造事物,然后将其move到长期存在的对象中。为什么C++不允许将左值对象绑定(bind)到右值引用?两者都允许我更改引用的对象,因此在访问引用对象的内部方面对我来说没有区别。我能猜到的唯一原因是函数重载歧义问题。 最佳答案 ButwhyC++doesn'tallowbindinglvalueobjectstorvaluereferences?假设您

c++ - std::bind2nd 的替代品

我有一个foo这是std::vector.它表示一组范围的“边缘”值。例如,如果foo是{1,3,5,7,11}那么范围是1-3,3-5,5-7,7-11。对我来说很重要,这相当于4个时期。请注意,每个句点包括范围中的第一个数字,而不是最后一个数字。因此,在我的示例中,8出现在第3个(从零开始)期间。7也出现在第三期。11及以上不会出现在任何地方。2出现在第0期。给定一个bar这是一个int,我用std::find_if(foo.begin(),foo.end(),std::bind2nd(std::greater(),bar))-foo().begin()-1;给我应该包含bar的句

linux - Active Directory 和 linux nslcd 绑定(bind)而不扩展 AD 模式

我需要将Linux客户端绑定(bind)到WindowsServer2012ActiveDirectory。我有一个测试环境,我在其中成功地使用samba-winbind-kerberos和nslcd,使用用户进行身份验证。然而,当使用samba-winbind-kerberos时,我能够在不扩展AD架构以包含UNIX属性(UID/GID、主目录、shell)的情况下实现这一点,因为smb.conf有一个idmap选项,指定起始范围idmapconfig*:range=11000-20000这将负责AD用户的UID/GID的unix映射。如果我不在AD中启用UNIX属性,我会在nslc