如何在型別中嵌入功能

2021-08-18 07:22:26 字數 1507 閱讀 3866

主要有兩種方法來實現在型別中嵌入功能:

a:聚合(或組合):包含乙個所需功能型別的具名字段。

b:內嵌:內嵌(匿名地)所需功能型別,像前一節 10.6

.5 所演示的那樣。

為了使這些概念具體化,假設有乙個 customer 型別,我們想讓它通過 log 型別來包含日誌功能,log 型別只是簡單地包含乙個累積的訊息(當然它可以是複雜的)。如果想讓特定型別都具備日誌功能,你可以實現乙個這樣的 log 型別,然後將它作為特定型別的乙個字段,並提供 log(),它返回這個日誌的引用。

方式 a 可以通過如下方法實現(使用了第 10.7 節中的 string() 功能):

package main

import (

"fmt"

)type

log struct

type customer struct

func main() }

// fmt.println(c) &

c.log().add("2 - after me the world will be a better place!")

fmt.println(c.

log())

}func (l *

log) add(s string)

func (l *

log) string() string

func (c *customer) log() *

log

輸出

1 - yes we can!

2 - after me the world will be a better place!

相對的方式 b 可能會像這樣:

package main

import (

"fmt"

)type

log struct

type customer struct

func main() }

c.add("2 - after me the world will be a better place!")

fmt.println(c)

}func (l *

log) add(s string)

func (l *

log) string() string

func (c *customer) string() string

結果

barak obama

log:

內嵌的型別不需要指標,customer 也不需要 add 方法,它使用 log 的 add 方法,customer 有自己的 string 方法,並且在它裡面呼叫了 log 的 string 方法。

如果內嵌型別嵌入了其他型別,也是可以的,那些型別的方法可以直接在外層型別中使用。

因此乙個好的策略是建立一些小的、可復用的型別作為乙個工具箱,用於組成域型別。

如何在VC中嵌入IE

一 需要在你的程式中嵌入ie瀏覽器的視窗。有兩種實現方法,其一,新增chtmlview的視類 其二,新增ie瀏覽器的activex控制項。其實不管用什麼方法,除了函式名稱稍有區別外,它們最終都呼叫了微軟的iwebbrowser2的介面。二 方法和步驟 1.建立乙個對話窗形式的mfc應用程式,注意在導...

如何在WPF中嵌入Winform控制項

當時把wpf的控制項canvas的handle傳給c 的專案去重新整理影象的時候發現最後重新整理的是整個wpf頁面而不是控制項所在的區域,還不知道有什麼辦法可以解決。不過可以在wpf中嵌入winform的影象控制項picturebox去做重新整理。嵌入方法 1.在專案的references中加入wi...

如何在django中新增日誌功能

官方文件 猛戳這裡 在settings中配置以下 logging dir 日誌檔案存放目錄 logging dir logs 日誌存放路徑 if not os.path.exists logging dir os.mkdir logging dir import logging logging fi...