第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用泛型STD:在一個(gè)類(lèi)中具有成員函數(shù)的函數(shù)對(duì)象

使用泛型STD:在一個(gè)類(lèi)中具有成員函數(shù)的函數(shù)對(duì)象

C++
慕田峪9158850 2019-08-03 12:03:15
使用泛型STD:在一個(gè)類(lèi)中具有成員函數(shù)的函數(shù)對(duì)象對(duì)于一個(gè)類(lèi),我想在一個(gè)類(lèi)中存儲(chǔ)一些指向同一個(gè)類(lèi)的成員函數(shù)的函數(shù)指針。map貯存std::function物品。但我在一開(kāi)始就失敗了,這段代碼是:class Foo {     public:         void doSomething() {}         void bindFunction() {             // ERROR             std::function<void(void)> f = &Foo::doSomething;         }};我收到error C2064: term does not evaluate to a function taking 0 arguments在……里面xxcallobj結(jié)合一些奇怪的模板實(shí)例化錯(cuò)誤。目前,我在Windows 8上使用VisualStudio 2010/2011,在Win 7上使用VS 10,它也失敗了。錯(cuò)誤必須基于一些我不遵循的奇怪的C+規(guī)則。編輯:我知道不用助推。這是集成在MS編譯器中的C+11。
查看完整描述

3 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

必須使用對(duì)象調(diào)用非靜態(tài)成員函數(shù).也就是說(shuō),它總是隱式地傳遞“this”指針作為它的參數(shù)。

因?yàn)槟?/trans>std::function簽名指定您的函數(shù)不帶任何參數(shù)(<void(void)>),你必須綁定第一個(gè)(也是唯一的)論點(diǎn)。

std::function<void(void)> f = std::bind(&Foo::doSomething, this);

如果要用參數(shù)綁定函數(shù),則需要指定占位符:

using namespace std::placeholders;std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);

或者,如果編譯器支持C+11 lambdas:

std::function<void(int,int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);}

(我手頭沒(méi)有C+11能力的編譯器現(xiàn)在就來(lái)所以我不能檢查這個(gè)。)




查看完整回答
反對(duì) 回復(fù) 2019-08-04
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

要么你需要

std::function<void(Foo*)> f = &Foo::doSomething;

這樣就可以在任何實(shí)例上調(diào)用它,或者需要綁定特定的實(shí)例,例如this

std::function<void(void)> f = std::bind(&Foo::doSomething, this);


查看完整回答
反對(duì) 回復(fù) 2019-08-04
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

如果需要存儲(chǔ)成員函數(shù)無(wú)類(lèi)實(shí)例,您可以這樣做:

class MyClass{public:
    void MemberFunc(int value)
    {
      //do something
    }};// Store member function bindingauto callable = std::mem_fn(&MyClass::MemberFunc);
    // Call with late supplied 'this'MyClass myInst;callable(&myInst, 123);

如果沒(méi)有,存儲(chǔ)類(lèi)型會(huì)是什么樣子?汽車(chē)?就像這樣:

std::_Mem_fn_wrap<void,void (__cdecl TestA::*)(int),TestA,int> callable

還可以將此函數(shù)存儲(chǔ)傳遞給標(biāo)準(zhǔn)函數(shù)綁定。

std::function<void(int)> binding = std::bind(callable, &testA, std::placeholders::_1);binding(123); // Call

過(guò)去和未來(lái)的注釋?zhuān)阂粋€(gè)舊的界面STD:Mem_func已經(jīng)存在了,但后來(lái)被廢棄了。有一個(gè)建議,C+17,可以提出指向可調(diào)用成員函數(shù)的指針..這將是最受歡迎的。



查看完整回答
反對(duì) 回復(fù) 2019-08-04
  • 3 回答
  • 0 關(guān)注
  • 386 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)