第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Go:函數(shù)回調(diào)返回接口的實(shí)現(xiàn)

Go:函數(shù)回調(diào)返回接口的實(shí)現(xiàn)

Go
胡子哥哥 2021-09-09 20:24:45
我有一個(gè)處理資源解析的系統(tǒng)(將名稱與文件路徑匹配等)。它解析文件列表,然后保留指向函數(shù)的指針,該函數(shù)返回接口實(shí)現(xiàn)的實(shí)例。更容易展示。資源.gopackage resourcevar (    tex_types    map[string]func(string) *Texture = make(map[string]func(string) *Texture)    shader_types map[string]func(string) *Shader  = make(map[string]func(string) *Shader))type Texture interface {    Texture() (uint32, error)    Width() int    Height() int}func AddTextureLoader(ext string, fn func(string) *Texture) {    tex_types[ext] = fn}dds.gopackage texturetype DDSTexture struct {    path   string    _tid   uint32    height uint32    width  uint32}func NewDDSTexture(filename string) *DDSTexture {    return &DDSTexture{        path:   filename,        _tid:   0,        height: 0,        width:  0,    }}func init() {    resource.AddTextureLoader("dds", NewDDSTexture)}DDSTexture完全實(shí)現(xiàn)了Texture接口,我只是省略了這些功能,因?yàn)樗鼈兒艽?,而不是我的問題的一部分。編譯這兩個(gè)包時(shí),出現(xiàn)如下錯(cuò)誤:resource\texture\dds.go:165: cannot use NewDDSTexture (type func(string) *DDSTexture) as type func (string) *resource.Texture in argument to resource.AddTextureLoader我將如何解決這個(gè)問題,或者這是接口系統(tǒng)的錯(cuò)誤?只是重申:DDSTexture完全實(shí)現(xiàn)resource.Texture.
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

是的,DDSTexture完全實(shí)現(xiàn)resource.Texture.


但是命名類型NewDDSTexture (type func(string) *DDSTexture)與未命名類型不同func (string) *resource.Texture:它們的類型標(biāo)識不匹配:


如果兩個(gè)函數(shù)類型相同,則它們具有相同數(shù)量的參數(shù)和結(jié)果值,對應(yīng)的參數(shù)和結(jié)果類型相同,并且兩個(gè)函數(shù)都是可變參數(shù)或兩者都不是。參數(shù)和結(jié)果名稱不需要匹配。


命名類型和未命名類型總是不同的。


即使您為函數(shù)定義了命名類型,它也不起作用:


type FuncTexture func(string) *Texture

func AddTextureLoader(ext string, fn FuncTexture)


cannot use NewDDSTexture (type func(string) `*DDSTexture`) 

as type `FuncTexture` in argument to `AddTextureLoader`

在這里,結(jié)果值類型不匹配DDSTexturevs. resource.Texture:

即使一個(gè)實(shí)現(xiàn)了另一個(gè)的接口,它們的基礎(chǔ)類型仍然不同):您不能將一個(gè)分配給另一個(gè)。


您需要NewDDSTexture()返回Texture(沒有指針,因?yàn)樗且粋€(gè)接口)。


func NewDDSTexture(filename string) Texture

請參閱此示例。


正如我在“將結(jié)構(gòu)指針轉(zhuǎn)換為 golang 中的接口指針”中所解釋的那樣,您通常不需要指向接口的指針。


查看完整回答
反對 回復(fù) 2021-09-09
  • 1 回答
  • 0 關(guān)注
  • 244 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號