下面的代碼無法編譯:的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