首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

boost::bind 不能处理函数重载 (error: no matching function for call to bind)

不过此时我仍怀疑是参数的问题,于是增加了一个同名的函数重载,参数照抄 create_task,结果就失败了;最神奇的是改为之前那版 start_task 也不行了,这才开始怀疑是函数重载的问题。...bind + 函数重载" 得到一些新的方案 (不能加 boost,bing 坑我),主要分两种: 强制转换 模板参数 其实不管哪种方式,都是在 bind 无法区分重载函数的场景下,告诉 bind 我们要绑定的是哪个重载版本...按理说根据提供给 bind 的参数,再匹配重载函数的参数列表,应该可以挑选正确的重载版本。...当然,比较迷的是,这里只有一个两参数的版本,bind 仍然报错了,这是够懒的。另外有些网上的文章说 (附录 4),bind 会挑选重载函数中第一个声明的版本,如果通过就通过,如果不通过就报错。...使用boost::bind和重载函数的访客模式 [6]. std::bind 和 成员函数中的重载函数 [7].  C++类重载函数的function和bind使用 [8].  C++ 闭包 探秘

1.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ Boost 库文档索引

    . config - 帮助 boost 库的开发者配置编译器特性;不打算提供给库用户使用. conversion - 各种类型间的转化,Numeric, polymorphic, 和 lexical casts..., 作者 Jeremy Siek 和 Chuck Allison. enable_if - 函数模板重载时的选择性包含, 作者 Jaakko Järvi, Jeremiah Willcock, 和 Andrew.... function - 为延期调用和回调的函数对象的包裹, 作者 Doug Gregor. functional - 增强的函数对象配接器, 作者 Mark Rodgers. lambda - 在实际调用地点定义小的无名函数对象...泛型编程的工具, 作者 Jeremy Siek. enable_if - 函数模板重载时的选择性包含, 作者 Jaakko Järvi, Jeremiah Willcock, 和 Andrew Lumsdaine...and Jens Maurer. config - 帮助 boost 库的开发者配置编译器特性;不打算提供给库用户使用.

    1.6K10

    VS编译BOOST,bjam参数详解

    vs2008编译boost 【一、Boost库的介绍】 Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。...,在调用的地方定义短小匿名的函数对象,很实用的functional功能; (5)concept check,检查泛型编程中的concept; (6)Mpl,用模板实现的元编程框架; (7)Thread,...可移植的C++多线程库; (8)Python,把C++类和函数映射到Python之中; (9)Pool,内存池管理; (10)smart_ptr,智能指针。...如下), 唯一不同的是两个文件名称一个在后面加上了boost版本信息, 为了让用户知道使用的boost的版本信息。...生成的库文件名称中包含 “-mt” variant=release 生成的库文件名称不包含 “-gd” variant= debug 生成的库文件名称包含 “-gd” runtime-link= static

    52610

    C++ 智能指针详解

    二、具体使用 1、总括 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。...所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。 访问智能指针包含的裸指针则可以用 get() 函数。...boost::shared_ptr 提供了一个函数 use_count() ,此函数返回 boost::shared_ptr 内部的引用计数。...另外,boost::scoped_array 没有重载“operator*”,其实这并无大碍,一般情况下,我们使用 get() 函数更明确些。     ...4、在需要访问 boost::shared_ptr 对象,而又不想改变其引用计数的情况下,使用boost::weak_ptr,一般常用于软件框架设计中。

    2K10

    C++ 智能指针

    具体使用 总括 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。...所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。 访问智能指针包含的裸指针则可以用 get() 函数。...boost::shared_ptr 提供了一个函数 use_count() ,此函数返回 boost::shared_ptr 内部的引用计数。...另外,boost::scoped_array 没有重载“operator*”,其实这并无大碍,一般情况下,我们使用 get() 函数更明确些。...4、在需要访问 boost::shared_ptr 对象,而又不想改变其引用计数的情况下,使用 boost::weak_ptr,一般常用于软件框架设计中。

    1K40

    Signals-The Boost C++ Libraries

    无论何时触发信号,函数都会按照它们与connect()关联的顺序执行。 还可以在connect()的重载版本的帮助下显式定义该顺序,该版本期望将int类型的值作为附加参数(示例67.4)。...int>> s; s.connect([]{ return 1; }); s.connect([]{ return 2; }); std::cout << s() << '\n'; } 组合器是带有重载...该操作符会被两个迭代器自动调用,这两个迭代器用于访问与特定信号关联的功能。当取消迭代器的引用时,将调用函数,并且它们的返回值在组合器中变得可用。...boost::signals2::signal使用boost::signals2::optional_last_value作为默认组合器。该组合器返回类型为boost::optional的对象。...boost::signals2::signal期望组合器定义一个称为result_type的类型,该类型表示operato()返回的值的类型。由于标准算法未定义此类型,因此编译器将报告错误。

    1.3K40

    Sole Ownership-The Boost C++ Libraries

    使用地址初始化后,在执行析构函数或调用成员函数reset()时会释放动态分配的对象。 例1.1使用类型为boost::scoped_ptr的智能指针p。用指向存储数字1的动态分配对象的指针初始化p。...get()返回锚定在智能指针中的对象的地址,该示例取消引用get()返回的地址以将2写入标准输出。 boost::scoped_ptr重载了运算符布尔运算符。...boost::scoped_ptr的析构函数使用delete释放引用的对象。...boost::scoped_array为操作符[]和布尔操作符bool提供了重载,使用operator []可以访问数组的特定元素,因此,类型为boost::scoped_array的对象的行为就像其拥有的数组一样...数字2作为p引用的数组中的第二个元素。 像boost::scoped_ptr一样,提供了成员函数get()和reset()来检索和重新初始化所包含对象的地址。

    63920

    编译boost

    VS2015编译boost1.62 Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。...# --show-libraries 显示构建的Boost库列表在安装步骤,然后退出 --layout= 确定是否选择库名和头文件位置,一边可以在同一系统上使用多个版本的Boost库或多个编译器编译的...versioned版本名,会影响库文件名和头文件路径taggedboost二进制文件的名称包括编译的构建属性(如variant和threading),但不包括编译器名称和版本或Boost...如果使用相同的编译器构建Boost的多个变体,此选项将非常有用。system二进制名称不包括Boost版本号或编译器的名称和版本号。...(VS2015就是msvc-14.0) variant=debug/release 选择构建variant link=static/shared 构建静态或共享库 threading=single/multi

    3.5K80

    11.1 C++ STL 应用字典与列表

    库的variant类型,实现了一个可变类型容器,用来存储两种不同类型,代码首先定义了一个名为var的variant类型数组,其大小为 3,可以容纳两种不同类型的vector容器。...需要时,可以在比较函数中指定自定义的元素排序方式。如果在重载的比较函数中返回的是 bool 值,那么此函数找到的是容器中的单个元素,而不是元素的下标。...如果返回的是迭代器,那么这个函数找到的则是对应下标位置的元素。...接下来使用for循环迭代遍历结构体,并使用迭代器it访问map容器中的值。...使用it->first访问结构的键值,使用it->second.x和it->second.y访问结构的x和y成员变量,使用it->second.CheckSum()访问结构的CheckSum()函数的返回值

    27720

    Boost C++ 库 | 智能指针(RAII、作用域指针、作用域数组)

    PROCESS_QUERY_INFORMATION: 允许查询进程的信息。具体可查看 OpenProcess 函数文档。这个参数指定了请求的访问权限。...PROCESS_QUERY_INFORMATION: 允许查询进程的信息。具体可查看 OpenProcess 函数文档。这个参数指定了请求的访问权限。...比如说,OpenProcess() 函数返回一个 HANDLE 类型的句柄,通过该句柄可以访问当前系统中的进程。在示例代码中,访问的是进程自己——换句话说就是应用程序本身。...我们通过这个返回的句柄提升了进程的优先级,这样它就能从调度器那里获得更多的 CPU 时间。这里只是用于演示目的,并没什么实际的效应。...可以通过 operator[]() 操作符访问数组中特定的元素,于是 boost::scoped_array 类型对象的行为就酷似它所含的数组。

    13310

    11.1 C++ STL 应用字典与列表

    库的variant类型,实现了一个可变类型容器,用来存储两种不同类型,代码首先定义了一个名为var的variant类型数组,其大小为 3,可以容纳两种不同类型的vector容器。...需要时,可以在比较函数中指定自定义的元素排序方式。如果在重载的比较函数中返回的是 bool 值,那么此函数找到的是容器中的单个元素,而不是元素的下标。...如果返回的是迭代器,那么这个函数找到的则是对应下标位置的元素。...接下来使用for循环迭代遍历结构体,并使用迭代器it访问map容器中的值。...使用it->first访问结构的键值,使用it->second.x和it->second.y访问结构的x和y成员变量,使用it->second.CheckSum()访问结构的CheckSum()函数的返回值

    53840

    std和boost的function与bind实现剖析

    首先,需要知道的是,bind函数返回的是一个叫bind_t的模板类。并且这是个可调用对象(重载了operator()操作符)。 接下来主攻第一个问题,它怎么处理不同类型的的参数绑定。...这里在list的实现上boost和std有一点小小的差异。由于boost要兼容老版本的编译器,而老版本编译器是不支持动态模板参数的。...图6: Boost 1.55.0 的list3调用实现示例之一 见上面两幅图中,图5的调用最终会转向图6。图6中最后一个int参数是用来利用重载区分不同情况的函数的,请直接忽略之。...首先是成员函数重载实现对占位符取相应的数据。这里面 **boost::arg到boost::arg**分别是占位符。如果是占位符,就会返回参数列表(也就是新的list)内的对应位置的数据。...在boost的实现里,每一种function实际绑定的类型都对应着一个静态的vtable对象。正如其名,他模拟了编译器的虚函数表的功能。

    1.1K30

    C++特性使用建议

    3.函数重载 (1)仅在输入参数类型不同、功能相同时使用重载函数(含构造函数),当使用具有默认形参值的函数(方法)重载的形式时,需要注意防止二义性。...例如,用 AppendString() 和 AppendInt() 等,而不是一口气重载多个Append()。 4.缺省参数 不建议使用缺省函数参数,尽可能改用函数重载。...虽然通过缺省参数,不用再为个别情况而特意定义一大堆函数了,与函数重载相比,缺省参数语法更为清晰,代码少,也很好地区分了必选参数和可选参数。...访问函数应该总是 const。其他不会修改任何数据成员,未调用非 const 函数,不会返回数据成员非 const 指针或引用的函数也应该声明成 const。...优点: Boost代码质量普遍较高,可移植性好,填补了 C++ 标准库很多空白,如型别的特性,更完善的绑定器,更好的智能指针。

    1.9K30

    std和boost的function与bind实现剖析

    首先,需要知道的是,bind函数返回的是一个叫bind_t的模板类。并且这是个可调用对象(重载了operator()操作符)。 接下来主攻第一个问题,它怎么处理不同类型的的参数绑定。...这里在list的实现上boost和std有一点小小的差异。由于boost要兼容老版本的编译器,而老版本编译器是不支持动态模板参数的。...图6中最后一个int参数是用来利用重载区分不同情况的函数的,请直接忽略之。而VC和GCC的实现中无非是改变了函数名称而已,流程是类似的。 简单地说,bind的构造和执行流程可以参照下图。 !...[](p938_08.png) 图8: Boost 1.55.0 内bind模块list去参数实现示例 从图中可以看出来,取参数的实现也相当简单。首先是成员函数重载实现对占位符取相应的数据。...正如其名,他模拟了编译器的虚函数表的功能。在function对象被赋值为不同类型的数据的时候,设置为了不同的vtable对象。

    1.8K10

    Boost asio 官方教程

    如果没有远端的数据或函数需要访问,那么每一个 I/O 服务就象一个小的自主应用。 这里的局部和远端是指象高速缓存、内存页这样的资源。...resolve_handler() 访问 I/O 对象 sock,用由迭代器 it 所提供的解析后地址创建一个连接。...它与原来的 boost::asio::deadline_timer 的区别在于,计时器的时长是作为参数传递给 wait() 或 async_wait() 方法的,而不是传给构造函数。...然后,在用于执行这个内部 I/O 服务的 run() 方法的线程内,调用该函数对象的重载 operator()()。 post() 提供了一个简单的方法,在另一个线程中执行一个函数对象。...wait_operation 的重载 operator()() 操作符基本上就是执行了和 wait() 方法相同的工作:调用服务实现中的阻塞式 wait() 方法。

    17.8K72

    Boost C++ 库 | 事件处理

    不过,Boost.Function 和 Boost.Signals 之间的一个主要区别在于,Boost.Signals 能够将一个以上的事件处理器关联至单个事件。...>>>boost::signal 实际上被实现为一个模板函数,具有被用作为事件处理器的函数的签名,该签名也是它的模板参数。在这个例子中,只有签名为 void () 的函数可以被成功关联至信号 s。...调用 s 会引发一个触发器,进而执行相应的 func() 函数 - 之前用 connect() 关联了的。同一例子也可以用 Boost.Function 来实现。...另外,执行的顺序也可通过 connect() 方法的另一个重载版本来明确指定,该重载版本要求以一个 int 类型的值作为额外的参数。.../build/Desktop_Qt_6_5_3_GCC_64bit-Debug/boost...1>>>合成器是一个重载了 operator()() 操作符的类。

    10010

    C++面试题

    例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。 (2)、构造函数和析构函数是否可以被重载,为什么?...构造函数可以被重载,因为构造函数可以有多个且可以带参数。 析构函数不可以被重载,因为析构函数只能有一个,且不能带参数。...最后有一个原因就是C++编译器的限制,许多编译器还不支持C++标准提出的模板分离编译模式(export关键字),而Boost库大量使用了模板,为了保持与各个编译器的兼容,也不得不采用这种.hpp的头文件形式...观察者模式、单例模式、工厂模式、状态模式 3、Boost库中的Singal2信号-槽和Qt中的信号-槽有什么区别? 4、Qt中多线程中槽函数是怎么调用的,调用的时机是什么?...修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。 8、protobuf协议有使用过么? 9、xml熟悉么?xpath是什么?

    2.3K30
    领券