【发布时间】:2015-09-07 05:35:30
【问题描述】:
以下代码无法编译:
#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 作为rvalues 的。但是 invoke 是为原始参数实例化的,它不能接受 binder 试图传递的内容。
这个问题有解决办法吗?
【问题讨论】:
标签: c++ c++11 perfect-forwarding stdbind