绑定和提升功能
bind and boost function
我正在尝试像这样使用 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
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用提升功能与地图绑定提升
- 绑定和提升功能
- C++ 由于无法解决过载功能而导致绑定失败
- C 使用多个lambdas/绑定以引用相同的功能
- 实现功能对象绑定而无需使用C 11
- 尝试将简单按钮绑定到SFGUI中的OnClick功能
- 绑定std ::功能错误
- rvalue参考绑定到std ::功能类型的LVALUE
- 如何拆分功能:绑定
- 转换std ::绑定到功能指针
- C 快速绑定成员功能的方法
- 如何绑定变异模板参数与功能
- STD ::绑定和超载功能
- 试图了解动态绑定和虚拟功能
- 消除对Boost ::的需求,以绑定我的功能
- C 预处理器中的功能绑定操作
- 虚拟功能和助推绑定奇怪的行为
- XML数据绑定-可以自动完成读/写功能