Feeds:
文章
留言

Archive for 一月 25th, 2008

CB6 使用 boost::tuple

boost 非常好用,但是 C++ Builder 6.0 的 C++ Compiler 似乎太舊了,對於部份語法支援不足,導致我想使用的 tuple 無法透過編譯。

我對 boost 源碼有興趣,可是無奈沒有時間,希望侯捷的 boost 源碼剖析快點出書。

所以,我只能先略過錯誤,在 boosttupledetailtuple_basic.hpp

#ifndef __BORLANDC__
template<int N, class T>
struct element<N, const T>
{
private:
  typedef typename T::tail_type Next;
  typedef typename element<N-1, Next>::type unqualified_type;
public:
#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
  typedef const unqualified_type type;
#else
  typedef typename boost::add_const<unqualified_type>::type type;
#endif

};
#endif

加入紅色文字的編譯條件,如此,下面的範例可正常運作

    boost::tuples::tuple<int,double> get_values() {
        return boost::make_tuple(6,12.0);
    }

    triple(42,3.14,"My first tuple!");
    int i=boost::tuples::get<0>(triple); // 42
    double d=triple.get<1>(); // 3.14
    std::string s=boost::get<2>(triple); // My first tuple!

    boost::tuples::tuple<int,double> ret = get_values();
    i = boost::tuples::get<0>(ret); // 6
    d = boost::tuples::get<1>(ret); // 12.0

 

至於這樣修改會不會導致其他問題,可能需要高人指點~

Read Full Post »

Google Docs 檔案上傳程式

Google Docs 終於有方便的上傳工具可用,雖然檔案大小依然有限制(簡報透過此工具可上傳單檔 10MB),但是可透過一次拖拉多個檔案,將檔案上傳到 Google Docs,下圖是程式的使用介面:

20080125

該程式也支援右鍵選單直接上傳單一檔案,如下圖:

200801252

透過這個便利程式,相信很多人都會透過這個將許多文件批次上傳到 Google Doc。

這個程式使用 .NET 撰寫,所以執行時,系統必須先安裝 .NET Framework 2.0。

另外,他目前似乎不支援中文,當檔名有中文字的時候,程式就會錯誤。可能未來版本會修正。

如果你覺得這個上傳器太陽春,你可以參考 [5] 有說明該程式如何透過 Google Data APIs 上傳文件。

期待有人寫出更棒的前端工具~

參考資料
[1] Google Docs Uploader
[2] Easily upload your documents to Google Docs!
[3] Batch Upload Files to Google Docs
[4] Google Toolbar for Firefox
[5] Google Data APIs

Read Full Post »

今天同事遇到一個問題,原先寫的物件需要一個 Function Object 作為參數,可是這個 Function Object 需要對目前狀態作處理,由於 JS 採用 Reference 方式,所以,狀態會被覆寫,不是很懂我在說什麼吧….

看個範例吧,

var x =["a", "b", "c"];
var a = x[2];

var CC = function(){
    alert( ‘CC: ‘ + x[2] ); // ‘d’
    alert( ‘CC: ‘ + a);      // ‘100’
};

x[2] = ‘d’; // (1)
a=’100′; // (2)
CC();   

請問有什麼方法,可以讓 CC() 執行之後,不會受到(1)(2) 修改的影響,依然皆顯示 ‘c’ 呢?

以下,是我的解法:

var x =["a", "b", "c"];
var a = x[2];

var BB = new function(){   
    var _a = a;
    var _x = x[2];
    return function(){

        alert( ‘BB: ‘ + _a ); // ‘c’
        alert( ‘BB: ‘ + _x);  // ‘c’
   }
};

x[2] = ‘d’;
a=’100′;
BB();   

關鍵在於利用新的 Function Object 來儲存狀態,並將該狀態套用樣板回傳。如此,後續狀態皆是當時的值。

Read Full Post »