以下代码无法编译:
如果我理解正确,原因如下:
#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()
包装,它将无法编译。 - Igor R.bind()
对于std::ref()
做了一些特殊处理。所以你也需要做一些特殊处理。 - Barry