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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

C++ C
蝴蝶不菲 2019-07-11 16:39:29
使用泛型STD:在一個類中具有成員函數(shù)的函數(shù)對象對于一個類,我想在一個類中存儲一些指向同一個類的成員函數(shù)的函數(shù)指針。map貯存std::function物品。但我在一開始就失敗了,這段代碼是: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é)合一些奇怪的模板實例化錯誤。目前,我在Windows 8上使用VisualStudio 2010/2011,在Win 7上使用VS 10,它也失敗了。錯誤必須基于一些我不遵循的奇怪的C+規(guī)則。編輯:我知道不用助推。這是集成在MS編譯器中的C+11。
查看完整描述

3 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗 獲得超8個贊

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

因為你std::function簽名指定您的函數(shù)不帶任何參數(shù)(<void(void)>),你必須綁定第一個(也是唯一的)論點(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);}

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


查看完整回答
反對 回復(fù) 2019-07-11
?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊

要么你需要

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

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

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


查看完整回答
反對 回復(fù) 2019-07-11
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊

如果需要存儲成員函數(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);

如果沒有,存儲類型會是什么樣子?汽車?就像這樣:

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

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

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

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


查看完整回答
反對 回復(fù) 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 586 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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