請問下為什麼std function接受普通的類成員函式會報錯,而使用std bind繫結的不會

時間 2021-06-03 13:30:26

1樓:

因為第乙個是你腦補出來的東西,第二個是揭示本質的東西

C++裡面的類成員方法本質是函式,函式的第乙個引數是類的例項指標

你要寫第乙個也不是不可以做到,你那個類成員得是資料,而不是方法,那麼這樣做有幾個方法,第乙個是把這個成員用std bind綁上去,或者像你在A類的callback那樣

2樓:海鵬

你應該用&Foo::print而不是foo.print

沒人教你這個語法就不要腦補,物件.成員函式這個結構只能後面跟括號呼叫,其他的一概不能

3樓:

成員函式一般不能這樣來使用function繫結,原因是成員函式一定是由成員來呼叫的。比如:

Foo foo1, foo2;

foo1.print()和foo2.print()代表的含義不一樣。雖然它們都是呼叫了print(),但是隱式傳入的this指標乙個是&foo1,另外乙個是&foo2。

無論如何,foo.print只是拿出了Foo::print而已。

而std::bind類似於生成了另外乙個functor:

void

unnamed

()它滿足std::function的簽名。

意識到成員函式和非成員函式的區別是很重要的,成員函式使用的呼叫約定叫作thiscall,呼叫它的時候,一定要先指定其類的乙個例項。

如果你需要使用乙個成員函式的包裝類,請參考std::mem_fn:

請問下 為什麼api js中為什麼好多都要設定乙個延時呢?settimout有什麼特殊的作用嗎?

清七對 唉,在2018年搞前端真好,都不用搞清什麼是非同步,什麼是task,什麼是setTimeout黑魔法。上來直接就看vue,vuex。沒有其他意思,只是說現在開發的確是方便了太多,坑也少了很多。題主的問題看其他人回答就好了,就是為了模擬非同步呼叫的。 Glimis 這一塊純粹是模擬ajax的意...

想請問下為什麼王進喜前輩跳進油田中攪拌泥漿就能夠抑制井噴現象呢?

誕於良夜之中 吳小燮 王進喜當然不是神奇小餅乾,但是加速調配鑽井液來為油井加壓防止井噴式是當時非常正確的選擇。這就是客觀事實,隨便定義為藝術創作未免有些不負責任吧?題主也沒問如何專業控制井噴,動不動就讓人多讀書幹什麼。我是分割線 開採深海石油不當是否會導致井噴?如果發生了應當如何應對?讀完大概能有點...

你好,我想請問下為什麼我總是會夢到我以前喜歡三年的同學?

tyf 青春期總會胡思亂想,建議你對自己的學習計畫做乙個長遠的目標,並去一一執行,去一一實現,如果他不跟你在同一學校,同一班級,不能經常見面,現在可以把他放在心底最深處,等未來你的目標實現還可以經常想起他,那就可以很自信的去找他。僅供參考 獨善其身 你知道嗎?當我看到這個問題的時候,我很驚訝。因為也...