[英]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.