Go?GO!隨感收集站

Go的模板實現

在go裏面,並沒有C++中的模板的概念,但是,這一概念可以使用接口來進行實現:

type Value interface{}
type Element struct{
    value Value
    pNext *Element
}

type List struct {
    pHead *Element;
}

上述代碼展示了實現具有模板特點的類型的定義方式:

簡單看看代碼,該代碼實現的是一個值的類型可變的鏈表結構,通過interface實現了鏈表的通用性(具體原因是每種數據結構都有默認的空接口實現)。


同理,如果想要定義接受多種參數的函數或者方法,可以用同樣的方法實現:

type e interface{}                                                                                                                           

func mult2(f e)e{
    switch f.(type){
        case int:
            return f.(int)*2
        case string:
            return f.(string) + f.(string) + f.(string)
    }
    return f
}

func Map(n []e, f func(e) e) []e{
    m := make( []e, len(n) )
    for k, v := range n {
        m[k] = f(v)
    }
    return m
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章