如何从“boost::function<var (void*, var)>”中获取 C 指针(如 'var (*)(vo
How to get C pointer (like `var (*)(void*, var)`) out of `boost::function<var (void*, var)>`?
可能的重复项:
将提升::函数降级为普通函数指针
所以我使用Flash C++编译器(又名flascc,alchemy)和havin代码,如下所示:
boost::function<var (void*, var)> f = boost::bind(&as3_socket::socket_socketData, this, _1, _2);
socket->addEventListener(flash::events::ProgressEvent::SOCKET_DATA, Function::_new(f, NULL));
获取下一个编译器错误:
$ g++ $JN -static -emit-llvm -c src/utils/http/as3_socket.cpp -I../boost/boost_libraries/install-dir/include
src/utils/http/as3_socket.cpp: In constructor ‘as3_socket::as3_socket()’:
src/utils/http/as3_socket.cpp:75: error: no matching function for call to ‘AS3::ui::Function::_new(boost::function<AS3::ui::var ()(void*, AS3::ui::var)>*, NULL)’
/cygdrive/c/Users/Avesta/Downloads/Flasboost::function<var (void*, var)>
.0.1134176_11-09-2012/sdk/usr/bin/../../usr/include/AS3++/builtin.h:179: note: candidates are: static AS3::ui::Function AS3::ui::Function::_new()
/cygdrive/c/Users/Avesta/Downloads/FlasCC_1.0.1134176_11-09-2012/sdk/usr/bin/../../usr/include/AS3++/builtin.h:180: note: static AS3::ui::Function AS3::ui::Function::_new(AS3::ui::var (*)(void*, AS3::ui::var), void*)
所以问题是如何从CC_1更多的C风格中获得var (*)(void*, var)
简短的回答是"你不能"。
boost 函数对象可能只包含一个函数指针,但它可能是对其他函数类型调用 boost::bind ()
并绑定某些参数的结果。它还可能包含函数对象。
仅仅因为您可以像指向函数的指针一样调用它并不意味着它是指向函数的指针。
[刚刚注意到 - 链接到上面的其他问题非常详细地解释了这一点]
你问错了问题。
boost::function
是一种表达"在未来做某事"的方式,但它不是指向C++函数的指针。 我这个太强了,不适合作为函数的指针。
但是,您的回调接口是一个C++函数,它接受一个 void 指针和其他东西。 通常,您同时为回调提供 void 指针和函数指针。
因此,您要做的是创建一个函数,该函数将 void 指针强制转换为对象,然后将调用它的其余参数传递给该对象。
确保投射到无效和重新投射的类型相同。
您甚至可以将指向boost::function
的指针转到虚空 ptr。
请注意,这给您留下了一个管理指向对象的商品的生命周期的问题。 很糟糕不是吗?
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 如何从“boost::function”中获取 C 指针(如 'var (*)(vo
- 制作可以作为参数 &var 或 var 获取的函数
- 在unsigned int var中获取负值