我的應用程序讓我調用一堆需要知道它們的最後狀態或最後一次調用狀態的回調函數。一個簡單的實例是兩次連續調用之間的時間差。記住狀態C++
我知道C++中的函數對象是一種通用的方式來做到這一點。但我是一個nOOb,不知道如何設置這個模式。任何幫助或特定的簡單代碼示例將非常感謝。
我的應用程序讓我調用一堆需要知道它們的最後狀態或最後一次調用狀態的回調函數。一個簡單的實例是兩次連續調用之間的時間差。記住狀態C++
我知道C++中的函數對象是一種通用的方式來做到這一點。但我是一個nOOb,不知道如何設置這個模式。任何幫助或特定的簡單代碼示例將非常感謝。
只要創建一個實現operator()的類。例如,
class F {
int state;
public:
int operator()(/*any parameters would go here*/){
return state++;
}
F() : state(0) {}
};
然後,您可以創建和實例將被調用並保留狀態。
F f;
f(); //returns 0
f(); //returns 1
它與通用函數有多大區別,它可以被調用並用於計算此示例中的狀態值 –
@ user1247384:它是一個對象,因此它可以記住它的狀態。 –
謝謝,我想這個想法是,如果我寫一個通用的getter函數來獲取狀態,我將無法記住它,就像獲取最後一個調用值一樣。在上面,我們通過簡單的調用知道最後的值。這看起來公平嗎? –
如果你想要一個比使用FSM更好的狀態框架。很少有像流行:
http://boost-extension.redshoelace.com/docs/boost/fsm/doc/reference.html
和
http://www.boost.org/doc/libs/1_51_0/libs/msm/doc/HTML/index.html
及其對新手有點複雜,但你會學到很多東西。你甚至可以實現你自己的虛擬版本(不那麼複雜)。
在示例類可以有20個狀態時,Fsms在嵌入式世界中非常有用。
那麼......回調/狀態機可能*不是*你想如何開始學習C++ ...... –
另外,你應該考慮閱讀一本關於C++的好書。 –
直到C++ 11引入綁定lambda時,回調函數在C++中是一個已知的痛苦。現在他們很好。如果可以的話,你應該使用C++ 11 lambda表達式。 – japreiss