[問題] std::bind + lambda + move-only object
如果在C++ 11 lambda想要move capture 似乎只能用一些手腳
於是我就好奇的做了一些測試
http://ideone.com/99S4Qx
大概分成三個問題(如code所列)
1. 這個最單純, 一般認知std bind回傳的物件可以用 std::function來接
但我這樣寫 怎麼樣都接不起來 似乎只能用auto讓他自己判斷, 為什麼呢?
2. 用了auto來寫 接了以後想要invoke看看, 誰知道遇到怪事
(a) lambda參數寫 const unique_ptr<int>& uptr2 後 就可以呼叫func2(這勉強可以接受)
(b) 參數寫 unique_ptr<int>& uptr2 竟然可以吃 std::move的rvalue ref
(這感覺內部實做還是by lvalue傳遞, 但又沒有std::rref 整個有點怪)
(c) 寫 unique_ptr<int>&& uptr2 或是 unique_ptr<int> uptr2 只要寫了func2() 就會
compile error...這我就不知道為什麼了
3. 也就是上面(c)的問題, 我是不是就不能呼叫了?
以上麻煩各位提供一些意見 釐清觀念
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.202.250
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480519276.A.FD3.html
→
11/30 23:49, , 1F
11/30 23:49, 1F
→
11/30 23:50, , 2F
11/30 23:50, 2F
→
11/30 23:57, , 3F
11/30 23:57, 3F
→
11/30 23:59, , 4F
11/30 23:59, 4F
→
12/01 00:05, , 5F
12/01 00:05, 5F
→
12/01 00:05, , 6F
12/01 00:05, 6F
→
12/01 00:06, , 7F
12/01 00:06, 7F
→
12/01 00:07, , 8F
12/01 00:07, 8F
→
12/01 00:08, , 9F
12/01 00:08, 9F
→
12/01 00:08, , 10F
12/01 00:08, 10F
→
12/01 00:09, , 11F
12/01 00:09, 11F
→
12/01 00:12, , 12F
12/01 00:12, 12F
→
12/01 23:52, , 13F
12/01 23:52, 13F