在我当前的项目中,我们正在同时为Linux和Windows构建。 不幸的是,因为有些平台问题,我们的MSVC非常陈旧。我们使用的是MSVC 2010.而gcc我们使用的是相对较新且更智能的版本,其版本为4.8。Casting std :: tr1 :: shared_ptr <T>和std :: shared_ptr <T>具有相同的功能但重载不同
下面的代码编译GCC但MSCV唠叨一下:
template<class T, class U>
std::shared_ptr<T> Cast(const std::shared_ptr<U>& spObject) // rename from CastTerrainObject
{
return std::dynamic_pointer_cast<T>(spObject);
}
template<class T, class U>
std::tr1::shared_ptr<T> Cast(const std::tr1::shared_ptr<U>& spObject) // rename from CastTerrainObject
{
return std::tr1::dynamic_pointer_cast<T>(spObject);
}
MSVC开始唠叨后,我增加对性病:: TR1 :: shared_ptr的第二个过载。 编译错误,我反复得到:
error C2995: 'std::tr1::shared_ptr<_Ty> Cast(const std::tr1::shared_ptr<_Ty2> &)' : function template has already been defined
And
error C2440: 'initializing' : cannot convert from 'std::tr1::shared_ptr<_Ty> (__cdecl *)(const std::tr1::shared_ptr<_Ty2> &)' to 'std::tr1::shared_ptr<_Ty>'
你们是否有我的情况的解决方案?
'#ifdef'它在平台上不起作用吗? – Yakk
它可能是其中一个是'使用shared_ptr =另一个'。在这种情况下,它是相同的类型,不能用于重载。 –
@Yakk我希望我可以轻松地进行测试,但是一旦我做出改变,自动生成机器就会被触发并且生成过程需要1-2小时。不幸的是,我需要确保首先应用。 –