绑定和提升功能

bind and boost function

本文关键字:功能 绑定      更新时间:2023-10-16

我正在尝试像这样使用 boost::bind 制作地图:

#include <boost/smart_ptr.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/assign/list_of.hpp>
#include <map>
#include <string>
#include <iostream>
using namespace boost::assign;
class BaseClass{
public:
    virtual void foo() { std::cout << "base" << std::endl;}
};
class childClass : public BaseClass {
public:
    virtual void foo() { std::cout << "derived" << std::endl;}
    ~childClass () {
        std::cout << "childClass destructor" << std::endl;   
    }
};
int main()
{
    boost::shared_ptr<BaseClass> pBase;
    // need help to make this bind work
    boost::bind( static_cast<void( boost::shared_ptr<BaseClass>::* )()>( &boost::shared_ptr<BaseClass>::reset ), pBase,
                  boost::shared_ptr<BaseClass>(new childClass() ) ) ;

    return 0;
}

我收到此错误:

C2825 "F":后跟"::"时必须是类或命名空间

C2510 "F"::"的左侧必须是类/结构/联合

C3646"类型":未知覆盖说明符

C4430 缺少类型说明符

C2039 "type":不是 'boost::_bi::result_traits' 的成员

似乎绑定不正确。

正如

我在评论中所写,您使它过于复杂,并且在不需要的地方添加了共享指针。

Map_t g_cmdMap;
g_cmdMap["cmd"] = boost::bind(&BaseClass::foo, boost::make_shared<BaseClass>());
g_cmdMap["alt"] = boost::bind(&BaseClass::foo, boost::make_shared<childClass>());

https://coliru.stacked-crooked.com/a/2728e997946d1f2e