探していた答えがあるかもしれないいくつかのトピックを読んでみましたが、答えが得られませんでした。
いかなる場合でも。基本 (インターフェイス) クラスへの shared_ptr のベクトルを保持するクラスがあります: IInputDevice。
マネージャー クラスのメンバー ベクトルは次のとおりです: CInputManager:
// In class: CInputManager
private:
std::vector<std::tr1::shared_ptr<IInputDevice>> m_vecpInputDevices;
また、特定の入力デバイス (キーボード、マウスなど) を取得するためのヘルパー関数もいくつかあります。
この場合、inputmanager の GetDevice 関数を呼び出すキーボード「ゲッター」があり、特定の入力タイプ ID を持つベクターで smart_ptr を返します。
inline std::tr1::shared_ptr<CKeyboard> GetKeyboard()
{
return CInputManager::GetInstance().GetInputDevice(CInputType::Keyboard());
}
関数を取得するには何らかのキャストが必要なため、関数は不完全です。
smart_ptr<CKeyboard>
タイプ。
特定のデバイスのベクトルを検索する CInputManager の "get" 関数を次に示します。
std::tr1::shared_ptr<IInputDevice> CInputManager::GetInputDevice(CInputType type)
{
for( std::vector<std::tr1::shared_ptr<IInputDevice>>::iterator pDeviceIter = m_vecpInputDevices.begin();
pDeviceIter != m_vecpInputDevices.end();
pDeviceIter++)
{
if( (*pDeviceIter)->GetInputType() == type )
return (*pDeviceIter);
}
return NULL;
}
CInputType クラスには、オーバーロードされた == 演算子もあり、ID が一致するかどうかのみをチェックします。従って
if( (*pDeviceIter)->GetInputType() == type )
return (*pDeviceIter);
したがって、この問題に対するスマートでシンプルなキャスト/解決策がある場合は、皆さんからの連絡をお待ちしております。特定のデバイスを取得するヘルパー関数が必要であることがわかります。
ありがとう、よろしく、 Oyvind