檢索時,我有一個std ::對象指針的地圖四處破壞:std::map<ConnectionID, IConnection *>
對象指針通過吸氣
它只會包含三個條目,每個從IConnection *
派生,所以我提出了三點便利的獲取器用於檢索每個對象,這會將IConnection *
條目轉換爲正確的對象並將其返回。它看起來像這樣:
GameConnection * Client::GetGameConnection()
{
GameConnection * pGameConn = NULL;
if ((pGameConn = (GameConnection *)GetConnection(ConnectionID::GAME_CONNECTION)))
return pGameConn;
return nullptr;
}
通用GetConnection()
方法是這樣的:
IConnection * Client::GetConnection(ConnectionID nConnID)
{
auto result = m_connections.find(nConnID);
if (result != m_connections.end())
{
return result->second;
}
return nullptr;
}
我相當確保GetGameConnection
是問題,因爲它的工作原理,如果我找回了整個地圖做:
std::map<ConnectionID, IConnection *> connections = pClient->GetConnections();
GameConnection * pGameConn = (GameConnection *)connections.at(ConnectionID::GAME_CONNECTION);
如果是鑄造到GameConnection *
導致問題,如何避免這樣做,和sti我們能夠像pClient->GetGameConnection()->FooBar();
一樣方便地調用GameConnection嗎? 從IConnection *
到GameConnection *
的投射應該沒問題,儘管它來自該界面。
的「它只會包含三個條目」 A地圖聽起來簡單的錯誤 –
不整個'GetGameConnection'方法歸結爲'return(GameConnection *)GetConnection(ConnectionID :: GAME_CONNECTION);'?它不應該是'dynamic_cast'而不是C風格的演員? –
@DieterLücking這是一張地圖,因爲我通過它來檢查傳入的數據。感謝你的關心。 Laurent:你說得對,我糾正了這個。 –