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
}




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