2015-04-28 39 views
0

OgrePrerequisites.hOgre如何在沒有C4251警告的導出類中使用STL容器?

#define _OgreExport __declspec(dllexport) 

template <typename K, typename V, typename P = std::less<K>, typename A = STLAllocator<std::pair<const K, V>, GeneralAllocPolicy> > 
struct map 
{ 
    typedef typename std::map<K, V, P, A> type; 
    typedef typename std::map<K, V, P, A>::iterator iterator; 
    typedef typename std::map<K, V, P, A>::const_iterator const_iterator; 
} 

OgreLogManager.h

class _OgreExport LogManager 
{ 
protected: 
    typedef map<String, Log*>::type LogList; 
    /// A list of all the logs the manager can access 
    LogList mLogs; 
}; 

LogManager使用std::map,但是當我建立這個項目,我沒有得到任何警告C4251:

**class 'std::map<_Kty,_Ty>' needs to have dll-interface to be used by clients of class** 

我想要了解Ogre如何消除C4251警告?

回答

0

他們明確地disable某些警告與#pragma warning。作爲MSDN上提到的,通常的做法是用

#pragma warning(push) 
#pragma warning(disable : 4705) 
// Some code 
#pragma warning(pop) 

結合本地禁用警告,要恢復原來的警告設置。他們恢復OgreHeaderSuffix.h中的警告設置,因此這些警告僅對庫代碼禁用。

相關問題