类模板声明中的类型不匹配
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
的参数,而不是类。更改为:
template<typename Tipoentrada,typename TipoSalida >
class TipoString : public ITipos<TipoString<Tipoentrada, TipoSalida>,TipoSalida>
{
using ITipos<TipoString<Tipoentrada, TipoSalida>,TipoSalida>::mconversionOk;
/*...*/
};
相关文章:
- 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配
- 重载函数的地址与所需类型不匹配
- 参数错误可能与类型不匹配有关?
- 调用子例程时类型不匹配
- POSIX(C )参数类型不匹配
- typedef 类型不匹配,将其传递到函数中
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- 候选模板被忽略:推断的类型与调整后的类型不匹配
- 内联 ASM:'out'的操作数类型不匹配
- 为什么我们有一个类型不匹配
- C++类和freeglut(参数类型不匹配)
- 警告 639:二进制操作中类型 'uint64' 的强类型不匹配
- 警告 634:相等或有条件的强类型不匹配(类型"bool")
- 不了解C++类型不匹配:const Foo* to Foo* const&
- 函数声明和定义的返回类型不匹配,编译器可以吗?
- 类型不匹配
- 返回指向常量getter的指针时,返回值类型与函数类型不匹配
- llvm pass replaceAllUses与类型不匹配?
- 参数类型不匹配(无效*)
- 重载运算符中的类型不匹配(写入管道)