1

我尝试阅读一些可能有我正在寻找的答案的主题,但我没有得到答案。

任何状况之下。我有一个类将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

4

0 回答 0