簡體   English   中英

類模板聲明中的類型不匹配

[英]type mismatch in class template declaration

我正在使用STL開發一個簡單的配置程序類,但我有點困在一個問題,這里是基本段中的代碼實現CRTP以避免虛擬接口聲明:

template<typename Tipo, typename Salida >
class ITipos{
public:
    Salida & convertir()
    {

        Salida aTipoSalida= static_cast<Tipo *>(this)->convertir_imp();
        return aTipoSalida;
    }

protected:
    bool mconversionOk;
};

template<typename Tipoentrada,typename TipoSalida >
class TipoString : public ITipos<TipoString,TipoSalida>
{
    using ITipos<TipoString,TipoSalida>::mconversionOk;
public:
    TipoString()
    {
        mconversionOk=false;
    }
    TipoSalida & convertir_imp()
    {
        TipoSalida aTipoSalida;
        return aTipoSalida;
    }
}

問題出在TipoString類的聲明中,編譯器不喜歡這個聲明:

template<typename Tipoentrada,typename TipoSalida >
class TipoString : public ITipos<TipoString,TipoSalida>

來自編譯器的消息是:

錯誤:模板參數列表中參數1的類型/值不匹配'模板類ITipos'

客戶端代碼是:

 TipoBase<std::string> * aTipoBase= new Tipo<std::string,float>;

接口的意圖是允許使用上述聲明從tipe轉換為任何類型,因為使用正常嘗試(聲明虛擬接口將顯式提供從類型執行轉換的方法(string - > float,..,等)),界面會增長,根本不會靈活。

您將模板作為ITipos的參數ITipos ,而不是類。 將其更改為:

template<typename Tipoentrada,typename TipoSalida >
class TipoString : public ITipos<TipoString<Tipoentrada, TipoSalida>,TipoSalida>
{
    using ITipos<TipoString<Tipoentrada, TipoSalida>,TipoSalida>::mconversionOk;
    /*...*/
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM