我尝试阅读一些可能有我正在寻找的答案的主题,但我没有得到答案。
任何状况之下。我有一个类将shared_ptr 的向量保存到基(接口)类:IInputDevice。
这是管理器类中的成员向量:CInputManager:
// In class: CInputManager
private:
std::vector<std::tr1::shared_ptr<IInputDevice>> m_vecpInputDevices;
我还有一些辅助函数,用于检索特定的输入设备(即:键盘、鼠标等)。
在这种情况下,我有一个键盘“getter”,它调用 inputmanager 的 GetDevice 函数,它返回向量中的 smart_ptr,它具有特定的输入类型 ID。
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