gpt4 book ai didi

c++ - 类模板声明中的类型不匹配

转载 作者:行者123 更新时间:2023-11-30 01:58:22 27 4
gpt4 key购买 nike

我正在使用 STL 开发一个简单的配置器类,但我遇到了一个问题,这里是基本类中实现 CRTP 以避免虚拟接口(interface)声明的代码:

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>;

接口(interface)的目的是允许使用上述声明从类型转换为任何类型,因为使用正常尝试(声明虚拟接口(interface)将显式提供执行类型转换的方法(字符串 -> float , .. ,etc)),界面会变大,而且一点都不灵活。

最佳答案

您引用的是模板作为 ITipos 的参数,而不是类。将其更改为:

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

关于c++ - 类模板声明中的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17572732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com