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改造任何类型的,使用上面的声明,因为使用正常尝试(声明一个虚拟接口将明确),该接口将增长,并且它不会是柔性的话 - 它执行从类型的转换(>浮,..,等字符串)的报价方法。