我的模板有问题,而且重载指针不匹配为int。
C:/Users/Bakaiya/Desktop/Onathe/src/AdminPlanetRepresentation.cpp:24:66:错误:来自' AdminPlanet *'到' int'失去精确度[-fpermissive] U :: log(U :: c(" +创建行星表示",int(目标)));
我有几次重载" c()"模板,但我当前的问题围绕着为什么我最近添加的指针超载,并没有解决这个问题。
template<class T>
inline String c( T a )
{
return Ogre::StringConverter::toString( a );
}
template<class T>
inline String c( T* a )
{
return c( (uint64_t)a );
}
多参数模板:
template<class T, typename... Args>
inline String c( T a, Args... args );
template<class T, typename... Args>
inline String c( T* a, Args... args );
...
template<class T, typename... Args>
inline String c( T a, Args... args )
{
return Ogre::StringConverter::toString( a ) + c( args... );
}
template<class T, typename... Args>
inline String c( T* a, Args... args )
{
return c( a ) + c( args... );
}
之前我正在构建为32位,并且没有任何问题让指针被隐式地强制转换为通用模板c( T a )
。但是,在64位版本中,这还不够。
为什么重载没有捕获指针并阻止它们被隐式转换为int?
包含其他重载和模板的完整文件是available here.
答案 0 :(得分:1)
根据链接代码,int( target )
中的问题为U::log( U::c( " + Creating planet representation ", int( target ) ) );
,与此处显示的代码无关。
改为使用uintptr_t(target)
。