下面的代码无法编译:的std ::绑定和完美转发
#include <functional>
template<class ...Args>
void invoke(Args&&... args)
{
}
template<class ...Args>
void bind_and_forward(Args&&... args)
{
auto binder = std::bind(&invoke<Args...>, std::forward<Args>(args)...);
binder();
}
int main()
{
int a = 1;
bind_and_forward(a, 2);
}
如果我理解正确的,原因如下:std::bind
会将它的参数,而当binder
的operator()
叫,它将所有绑定参数作为左值 - 即使那些输入bind
的值为右值。但是invoke
被初始化为原始参数,并且它不能接受binder
试图通过它的内容。
有没有解决这个问题的方法?
但是在这种情况下,它不会编译用'std :: ref()'包装的参数。 –
@IgorR。更新了那个 - 'bind()'为'std :: ref()'做了一些特殊的处理。所以你必须做一些特别的事情。 – Barry