1
我開發使用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>
來自編譯器的消息是:
error: type/value mismatch at argument 1 in template parameter list for ‘template class ITipos’
客戶端代碼是:
TipoBase<std::string> * aTipoBase= new Tipo<std::string,float>;
接口的目的是允許從一個TIPE改造任何類型的,使用上面的聲明,因爲使用正常嘗試(聲明一個虛擬接口將明確),該接口將增長,並且它不會是柔性的話 - 它執行從類型的轉換(>浮,..,等字符串)的報價方法。