- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我确定这一定是一个常见问题,所以如果只是我的搜索技巧失败了,我深表歉意。
我正在尝试在没有提升的情况下执行此操作,因为该功能存在于 C++11 中,而且我是标准的支持者。
我正在尝试使用 std::bind() 将来自外部库的类中的方法包装起来。 (特别是: asio::io_service::run() )不幸的是,该方法被重载,这混淆了 std::bind()。
演示问题的最小测试用例:
#include <functional> // std::bind
class Test{
public:
void method(){}
void method(int i){}
};
int main(int argc, char * argv[]) {
Test test_instance;
auto bound_thing_1 = std::bind(Test::method, test_instance);
return 0;
}
并编译:
duncan@casper:/tmp/bind_test$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.3.1-14ubuntu2.1' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)
duncan@casper:/tmp/bind_test$ /usr/bin/g++ -Wall -std=c++11 ./main.c -o test.bin
./main.c: In function ‘int main(int, char**)’:
./main.c:12:61: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Test&)’
auto bound_thing_1 = std::bind(Test::method, test_instance);
^
In file included from /usr/include/c++/5/memory:79:0,
from /usr/include/asio/detail/addressof.hpp:21,
from /usr/include/asio/detail/handler_alloc_helpers.hpp:19,
from /usr/include/asio/detail/bind_handler.hpp:19,
from /usr/include/asio/detail/wrapped_handler.hpp:18,
from /usr/include/asio/io_service.hpp:24,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/c++/5/functional:1462:5: note: candidate: template<class _Func, class ... _BoundArgs> typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type std::bind(_Func&&, _BoundArgs&& ...)
bind(_Func&& __f, _BoundArgs&&... __args)
^
/usr/include/c++/5/functional:1462:5: note: template argument deduction/substitution failed:
./main.c:12:61: note: couldn't deduce template parameter ‘_Func’
auto bound_thing_1 = std::bind(Test::method, test_instance);
^
In file included from /usr/include/c++/5/memory:79:0,
from /usr/include/asio/detail/addressof.hpp:21,
from /usr/include/asio/detail/handler_alloc_helpers.hpp:19,
from /usr/include/asio/detail/bind_handler.hpp:19,
from /usr/include/asio/detail/wrapped_handler.hpp:18,
from /usr/include/asio/io_service.hpp:24,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/c++/5/functional:1490:5: note: candidate: template<class _Result, class _Func, class ... _BoundArgs> typename std::_Bindres_helper<_Result, _Func, _BoundArgs>::type std::bind(_Func&&, _BoundArgs&& ...)
bind(_Func&& __f, _BoundArgs&&... __args)
^
/usr/include/c++/5/functional:1490:5: note: template argument deduction/substitution failed:
./main.c:12:61: note: couldn't deduce template parameter ‘_Result’
auto bound_thing_1 = std::bind(Test::method, test_instance);
所以那里的问题(正如我所解释的那样)是 std::bind 不知道是使用 method()
还是 method(int)
。
我的下一步是明确告诉 std::bind() 哪个方法:
#include <functional> // std::bind
class Test{
public:
void method(){}
void method(int i){}
};
int main(int argc, char * argv[]) {
Test test_instance;
// auto bound_thing_1 = std::bind(Test::method, test_instance);
auto bound_thing_2 = std::bind(static_cast<void(Test::*)(void)>(&Test::method), test_instance);
return 0;
}
这构建正确。 (耶!)
所以现在我尝试使用我想要的库来应用相同的逻辑: http://think-async.com/Asio/asio-1.10.6/doc/asio/reference/io_service/run.html
#include <asio.hpp>
#include <thread> // std::thread
#include <functional> // std::bind
int main(int argc, char * argv[]) {
asio::io_service io_service_instance;
auto bound_thing_3 = std::bind(static_cast<std::size_t(asio::io_service::*)(void)>(&asio::io_service::run), io_service_instance);
std::thread mythread(bound_thing_3)
return 0;
}
编译失败:
duncan@casper:/tmp/bind_test$ /usr/bin/g++ -Wall -std=c++11 ./main.c -o test.bin -lpthread
In file included from /usr/include/c++/5/functional:55:0,
from /usr/include/c++/5/memory:79,
from /usr/include/asio/detail/addressof.hpp:21,
from /usr/include/asio/detail/handler_alloc_helpers.hpp:19,
from /usr/include/asio/detail/bind_handler.hpp:19,
from /usr/include/asio/detail/wrapped_handler.hpp:18,
from /usr/include/asio/io_service.hpp:24,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/c++/5/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = asio::io_service; long unsigned int _Idx = 0ul; _Head = asio::io_service]’:
/usr/include/c++/5/tuple:369:49: required from ‘constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 0ul; _Head = asio::io_service]’
/usr/include/c++/5/tuple:484:17: required from ‘std::_Bind<_Functor(_Bound_args ...)>::_Bind(std::_Bind<_Functor(_Bound_args ...)>&&) [with _Functor = std::_Mem_fn<long unsigned int (asio::io_service::*)()>; _Bound_args = {asio::io_service}]’
./main.c:16:130: required from here
/usr/include/c++/5/tuple:115:42: error: use of deleted function ‘asio::io_service::io_service(const asio::io_service&)’
: _M_head_impl(std::forward<_UHead>(__h)) { }
^
In file included from /usr/include/asio/basic_io_object.hpp:19:0,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/io_service.hpp:184:7: note: ‘asio::io_service::io_service(const asio::io_service&)’ is implicitly deleted because the default definition would be ill-formed:
class io_service
^
In file included from /usr/include/asio/io_service.hpp:23:0,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/detail/noncopyable.hpp:31:3: error: ‘asio::detail::noncopyable::noncopyable(const asio::detail::noncopyable&)’ is private
noncopyable(const noncopyable&);
^
In file included from /usr/include/asio/basic_io_object.hpp:19:0,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/io_service.hpp:184:7: error: within this context
class io_service
^
In file included from /usr/include/c++/5/memory:79:0,
from /usr/include/asio/detail/addressof.hpp:21,
from /usr/include/asio/detail/handler_alloc_helpers.hpp:19,
from /usr/include/asio/detail/bind_handler.hpp:19,
from /usr/include/asio/detail/wrapped_handler.hpp:18,
from /usr/include/asio/io_service.hpp:24,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/c++/5/functional: In instantiation of ‘std::_Bind<_Functor(_Bound_args ...)>::_Bind(std::_Bind<_Functor(_Bound_args ...)>&&) [with _Functor = std::_Mem_fn<long unsigned int (asio::io_service::*)()>; _Bound_args = {asio::io_service}]’:
./main.c:16:130: required from here
/usr/include/c++/5/functional:1120:78: note: synthesized method ‘constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple< <template-parameter-1-1> >&&) [with _Elements = {asio::io_service}]’ first required here
: _M_f(std::move(__b._M_f)), _M_bound_args(std::move(__b._M_bound_args))
^
In file included from /usr/include/c++/5/functional:55:0,
from /usr/include/c++/5/memory:79,
from /usr/include/asio/detail/addressof.hpp:21,
from /usr/include/asio/detail/handler_alloc_helpers.hpp:19,
from /usr/include/asio/detail/bind_handler.hpp:19,
from /usr/include/asio/detail/wrapped_handler.hpp:18,
from /usr/include/asio/io_service.hpp:24,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/c++/5/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 0ul; _Head = asio::io_service]’:
/usr/include/c++/5/tuple:357:21: required from ‘constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 0ul; _Head = asio::io_service]’
/usr/include/c++/5/tuple:473:33: required from ‘constexpr std::tuple< <template-parameter-1-1> >::tuple(const _Elements& ...) [with _Elements = {asio::io_service}]’
/usr/include/c++/5/functional:1114:70: required from ‘std::_Bind<_Functor(_Bound_args ...)>::_Bind(_Functor&&, _Args&& ...) [with _Args = {asio::io_service&}; _Functor = std::_Mem_fn<long unsigned int (asio::io_service::*)()>; _Bound_args = {asio::io_service}]’
/usr/include/c++/5/functional:1468:42: required from ‘typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type std::bind(_Func&&, _BoundArgs&& ...) [with _Func = long unsigned int (asio::io_service::*)(); _BoundArgs = {asio::io_service&}; typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type = std::_Bind<std::_Mem_fn<long unsigned int (asio::io_service::*)()>(asio::io_service)>]’
./main.c:16:130: required from here
/usr/include/c++/5/tuple:108:25: error: use of deleted function ‘asio::io_service::io_service(const asio::io_service&)’
: _M_head_impl(__h) { }
问题:任何人都可以帮助我(或指出我的信息来源)了解这里发生的事情。我怀疑这个问题与 static_cast 的“静态”性质有关...
这个使用 lambda 函数的可能解决方案可行,但我很想听听关于它是否是“正确”做事方式的意见。我个人也觉得这更容易解析:
#include <asio.hpp>
#include <thread> // std::thread
#include <functional> // std::bind
int main(int argc, char * argv[]) {
asio::io_service io_service_instance;
auto bound_thing_4 = [&](){
return io_service_instance.run();
};
std::thread mythread(bound_thing_4);
return 0;
}
[编辑]解决方案:
似乎 asio::io_service 的实例不喜欢被复制:
#include <asio.hpp>
int main(int argc, char * argv[]) {
asio::io_service io_service_instance;
auto io_service_instance_2 = io_service_instance;
return 0;
}
给出编译器错误:
duncan@casper:/tmp/bind_test$ /usr/bin/g++ -Wall -std=c++11 ./main.c -o test.bin -lpthread
./main.c: In function ‘int main(int, char**)’:
./main.c:5:32: error: use of deleted function ‘asio::io_service::io_service(const asio::io_service&)’
auto io_service_instance_2 = io_service_instance;
^
In file included from /usr/include/asio/basic_io_object.hpp:19:0,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/io_service.hpp:184:7: note: ‘asio::io_service::io_service(const asio::io_service&)’ is implicitly deleted because the default definition would be ill-formed:
class io_service
^
In file included from /usr/include/asio/io_service.hpp:23:0,
from /usr/include/asio/basic_io_object.hpp:19,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/detail/noncopyable.hpp:31:3: error: ‘asio::detail::noncopyable::noncopyable(const asio::detail::noncopyable&)’ is private
noncopyable(const noncopyable&);
^
In file included from /usr/include/asio/basic_io_object.hpp:19:0,
from /usr/include/asio/basic_socket.hpp:20,
from /usr/include/asio/basic_datagram_socket.hpp:20,
from /usr/include/asio.hpp:19,
from ./main.c:1:
/usr/include/asio/io_service.hpp:184:7: error: within this context
class io_service
因此工作解决方案涉及通过引用传递而不是复制(根据 ecatmur 的回答):
#include <asio.hpp>
#include <thread> // std::thread
#include <functional> // std::bind
int main(int argc, char * argv[]) {
asio::io_service io_service_instance;
auto bound_thing_3 = std::bind(
static_cast<std::size_t(asio::io_service::*)(void)>(&asio::io_service::run),
std::ref(io_service_instance));
std::thread mythread(bound_thing_3);
return 0;
}
我不知道该怎么做... function f1() { var x = 10; function f2(fx) { var x; x = 6;
早期绑定(bind)和后期绑定(bind)有什么区别? 最佳答案 简短的回答是,早期(或静态)绑定(bind)是指编译时绑定(bind),后期(或动态)绑定(bind)是指运行时绑定(bind)(例如
如何在 SwiftUI View 上使用 Binding(get: { }, set: { }) 自定义绑定(bind)与 @Binding 属性。我已成功使用此自定义绑定(bind)与 @State
我经常发现自己遇到问题,即控件的两个(相关)值被更新,并且两者都会触发昂贵的操作,或者控件可能会暂时处于不一致的状态。 例如,考虑一个数据绑定(bind),其中两个值 (x,y) 相互减去,最终结果用
我想通过我的 ViewModel 控制我的一个窗口的高度和宽度。 这看起来很简单。 但没有。它不起作用。 它检查 ViewModel 的 Width但不是 Height . 奇怪的是,如果我切换 W
UI5中一次性绑定(bind)和单向绑定(bind)有什么区别? 是否有任何用户特定的用例我会使用它们? 我无法从文档中获得太多信息。 最佳答案 单程 它的作用:单向数据流。模型数据的变化(例如通过
(define make (lambda (x) (lambda (y) (cons x (list y))))) (let ((x 7) (p (make 4))) (cons
尽管我或多或少地了解什么是语言绑定(bind),但我很难理解它们是如何工作的。 例如,谁能解释一下如何为 WinAPI 制作 Java 绑定(bind)? 最佳答案 如果您搜索 Foreign Fun
谁能解释为什么我可以重新绑定(bind)列表但不能+? (binding [list vector] (list 1 3)) (binding [list +] (list 1 3)) (bi
我真的很喜欢 Caliburn 和命名约定绑定(bind),我很惊讶 可见性与“CanNAME”约定用于保护 Action 的方式不同。 据我所知, BooleanToVisibilityConver
我了解动态绑定(bind)的实现方式以及静态绑定(bind)和动态绑定(bind)之间的区别,但我只是无法理解动态绑定(bind)的定义。基本上它是一种运行时绑定(bind)类型。 最佳答案 基本上,
http://jsfiddle.net/3NRsd/ var foo = $("div").bind("click", function() { $("div").animate({"hei
这个问题我快疯了...我有一个用户控件,它有一个用于插入操作的 FormView 和一个用于所有其他操作的 GridView。 在这两个控件中,我都有一个 DropDownList,如下所示: '
我有一个绑定(bind)到 ListBox 的地址的 ObservableCollection。然后在 ItemTemplate 中,我使用 {Binding .} 绑定(bind)到当前地址记录。这
如果我有以下简单的 js/knockout 代码: .js( View 模型): var image = ko.observable('http://placehold.it/300x150'); 看
我正在 aurelia 上开发一个自定义属性,让用户在输入文本区域时从列表中进行选择。例如,用法将是这样的: 正如您可能注意到的,auto-complete是属性。现在,当我想显示提示时,我想在自定
我正在使用 EventEmitter2作为我的应用程序内部的消息总线。现在我需要绑定(bind)和取消绑定(bind)一些事件处理程序。因为我也希望他们bind将它们添加到给定的上下文中,我最终得到以
我有以下函数调用: $(".selector").on("click", callback.bind(this, param1, param2)); 在我的回调函数中,我想使用绑定(bind)的 th
我目前正在试验新的编译绑定(bind),并且(再次)达到了我在拼图中遗漏了一个小问题:为什么我必须调用 Bindings.Update?直到现在,我还认为实现 INotifyPropertyChang
我正在阅读一本关于编写 JavaScript 框架的书,并找到了这段代码。但是我不明白它是如何工作的,尤其是 bind.bind 的用法?有人知道吗? var bind = Function.prot
我是一名优秀的程序员,十分优秀!