如果我有一個結構: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;}
如果我有一個結構: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;}
首先,void bar() {}
的功能類型是void()
而不是bool()
,所以func應該是:
std::function<void()> func;
第二件事:目前還不清楚「C++如何重載操作符的成員變量」的意思。如果你想讓你的代碼編譯,那麼上面的改變就足夠了。如果您想撥打f();
,可以重載的運營商是void operator()() { func(); }
。
如果你想保持bool()
功能類型,仍然能夠調用void()
功能,那麼你可以使用lambda,這將調用bar
並返回true:
f.func = [](){ bar(); return true;};
對最後一行的評論意味着他希望賦值導致'f.func'存儲'bar'的修改版本,它在執行'bar'通常會做的事情之後返回true。 –
沒有必要的'typedef結構X { }在C++中,X是無意義的。只要寫'struct X {}' –
如果你的谷歌* C++重載操作符的成員變量*你會得到你的答案。你應該自己做一些工作,只有在盡職調查之後,你仍然難倒,請在這裏問問。 – MikeJRamsey56