2016-04-23 63 views
-1

如果我有一個結構:C++如何重載運營商成員變量

typedef struct Foo 
{ 
    std::function<bool()> func; 
}Foo; 

,我有一個void函數

void bar(){std::cout << "hey";} 

,我希望能夠做到這一點:

Foo f; 
f.func = bar // f.func == func(){std::cout << "hey"; return true;} 
+1

沒有必要的'typedef結構X { }在C++中,X是無意義的。只要寫'struct X {}' –

+0

如果你的谷歌* C++重載操作符的成員變量*你會得到你的答案。你應該自己做一些工作,只有在盡職調查之後,你仍然難倒,請在這裏問問。 – MikeJRamsey56

回答

1

首先,void bar() {}的功能類型是void()而不是bool() ,所以func應該是:

std::function<void()> func; 

第二件事:目前還不清楚「C++如何重載操作符的成員變量」的意思。如果你想讓你的代碼編譯,那麼上面的改變就足夠了。如果您想撥打f();,可以重載的運營商是void operator()() { func(); }

如果你想保持bool()功能類型,仍然能夠調用void()功能,那麼你可以使用lambda,這將調用bar並返回true:

f.func = [](){ bar(); return true;}; 
+0

對最後一行的評論意味着他希望賦值導致'f.func'存儲'bar'的修改版本,它在執行'bar'通常會做的事情之後返回true。 –