Re: [問題] 檢查值有沒有改變

看板C_and_CPP作者 (高髮箍)時間11年前 (2013/03/27 22:56), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
56推
03/28 00:08, 2F
文章代碼(AID): #1HKmYapq (C_and_CPP)
文章代碼(AID): #1HKmYapq (C_and_CPP)