我在我的项目中使用了一些第三方库。更新到库的新版本后,我遇到了错误。
我班上有一个方法
virtual RTSPServer::RTSPClientSession* createNewClientSession(u_int32_t sessionId)override;
但是在RTSPClientSession的新版本的库声明中被移动到另一个类并重命名。现在正确的名称是
GenericMediaServer::ClientSession
我需要一个能够正确编译所有版本库的代码。
在gcc我使用以下代码:
#ifdef RTSPServer::RTSPClientSession
using ClientSessionClass = RTSPServer::RTSPClientSession;
#else
using ClientSessionClass = GenericMediaServer::ClientSession;
#endif
class A
{
.........
virtual ClientSessionClass* createNewClientSession(u_int32_t sessionId)override;
};
但这在MSVC 2010中不起作用。 我怎么能检测到我应该使用哪个声明?
UPD:gcc的代码也不适用于旧版本的库:(
答案 0 :(得分:2)
“我如何能够检测到我应该使用哪种声明?”
您需要为当前构建配置使用的库版本引入一些鉴别器:
#ifdef OLD_LIBRARY_VERSION // Maybe the binding headers have some information like this.
// If not you have to select this manually, and provide the
// setting with your project configuration.
using ClientSessionClass = RTSPServer::RTSPClientSession;
#else
using ClientSessionClass = GenericMediaServer::ClientSession;
#endif