Re: [問題] 檢查值有沒有改變
※ 引述《opthr1215 (天天)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++ 2010
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: MFC
: 問題(Question):
: 我現在有一段程式 每隔一段時間就會自己執行一次
: 然後為了降低他的執行頻率 因為他常常會算同樣的資料
: 所以新增了一個變數temp 存"上一次的變數值"
: 然後如果上一次的跟這一次的不一樣
: 就執行程式
: 然後現在遇到一個問題是
: 同事希望可以不要使用temp
: 不知道有沒有其他的方式可以解決?
: 我目前是有想
: 可以在值改變的當下就呼叫這個程式
: 這樣是可行的 但是寫起來略醜
: 或是在值改變的地方新增一個布林涵數作判斷
: 不過好像有點像temp的想法
: 或是不知道C++本身有沒有函數可以判斷值是否改變?
參照以下範例程式:
http://ideone.com/MAgc7G
類別 Foo 中有一個資料成員 value, 基本上你可以看到對它
做 modification的操作只有第 20 行的 operator= (內建型
別皆是如此), 所以我們可以增加一個 wrapper class並且重
載運算子:
#include <functional>
template < typename T >
class my_ {
T value;
std::function<void(T const &)> notifier;
public:
template < typename F >
my_( T const & init, F f )
: value( init ), notifier( f )
{ }
// for write
T& operator=( T const & next ) {
if( !std::equal_to<T>()(value, next) )
notifier( next );
return value = next;
}
// for read
operator T const & () const
{ return value; }
};
對於內建型別而言, 任何意圖修改內部值的操作都必須經由
operator=() 來達成, 你就可以在這個地方對參數進行比較
讀取的動作也可以透過轉型運算子來支援, 所以client程式
需要修改的地方並不多.
最後的程式長這樣:
http://ideone.com/MZUaZG
如果連 callback 都固定的話, 就不用再多額外的變數了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (03/27 22:59)
推
03/28 00:08, , 1F
03/28 00:08, 1F
推
03/28 00:08, , 2F
03/28 00:08, 2F
討論串 (同標題文章)