Я разрабатываю простой класс конфигуратора с использованием STL, но я немного застрял с проблемой, вот код, который в базовой Clase реализует 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>;
Намерение интерфейса, чтобы разрешить преобразование из Отметить Тип любого типа, используя вышеупомянутую декларацию, потому что с помощью обычной попытки (объявляющий виртуальный интерфейс будет явно предлагающий метод, который выполняет преобразование из типов (строка -> float, .. и т. д.)), интерфейс будет расти, и он не будет гибким вообще.