Feeds:
文章
留言

Archive for 九月 12th, 2005

callback

今天再寫一些測試程式的時候,突然想到,C++的callback怎麼寫,很久沒用都忘了,其實只是定義一個溝通的介面,只要符合介面的函數都可以使用,
所以,可以使用 typedef 先定義一個 callback
介面,接著只要將實作該介面的實體傳遞給函數進行註冊,都函數當中需要使用該函數時會自動呼叫,目前這種方法用在許多的地方,例如: Windows
的視窗訊息傳遞

下面是一個簡單的範例

#include "stdafx.h"
#include <iostream>
typedef void (*display_func)(int); // 定義 callback 介面

// 實作 callback 介面
void display(int v){
    using std::cout;
    using std::endl;
    cout << v <<endl;
}

// func: callback 函數
void noRepeat(display_func func){
  func(100);    // 調用 callback
}

int main(int argc, char* argv[])
{
  noRepeat(display); // 將實作的 callback 傳遞給函數
  return 0;
}

Read Full Post »

中文字問題

今天再處理一個奇怪的錯誤,有問題的文字如下
 
$msg = "高雄市中正二路一段三號"
 
看似平凡的一段字串資料,卻隱藏陣陣殺機,因為程式中會判斷字串是否含有@字元,
if (strpos($msg, ‘@’)!==false){…}
 
結果上面的字串居然通過了,還好以前有發生類似的問題,所以我猜測可能又是中文字惹的禍
馬上用 ultraEdit 查了一下,果然…

 
 一段之前會含有一個@字元,導致上面的判斷是成立。既然知道問題的原因,那就是將上述的判斷改用 Multibyte String 含數改寫,如下
 
 mb_internal_encoding("Big5"); // 指定字串編碼
 if (mb_strpos($msg, ‘@’)!==false){…}

Read Full Post »