我有以下问题:
extern Keyboard keyboard;
extern Controller controller;
class PlayerInputDevice
{
public:
void SetDevice( DEVICETYPE deviceType )
{
switch( deviceType )
{
case KEYBOARD:
Device = &keyboard;
break;
case CONTROLLER:
Device = &controller;
break;
}
}
Keyboard* Device;
Controller* Device;
};
显然,基于分配&键盘和&控制器希望选择正确属性的事实,我不能将2个设备属性作为不同类型。 (加上八卦者不喜欢它)......
这个问题的解决方案是什么:如何为多种类型提供一个属性?
我玩过很多不同的模板想法,但似乎从未完全成功......我需要伸出援手来开辟新的道路。
使用上述内容的一个例子是:
class ControlState
{
virtual bool Jumping() = 0;
virtual PressingUp() = 0;
}
class Keyboard : ControlState
{
// Implement those suckers
}
class Touch : ControlState
{
// Implement those suckers
}
class Player
{
PlayerInputDevice Input;
}
Player player;
player.Input.SetDevice( KEYBOARD );
player.Input.Device.PressingUp()
以上示例实际上可能是ControlState
只有布尔属性,Keyboard
和Touch
(在这种情况下)可能只有FingerMovedUp()
的输入方法然后会导致将ControlState
bool Up
设置为true ...但只是示例等。
答案 0 :(得分:0)
如果期望ControlState是所有设备的基类(确保使用public
访问说明符,因为默认为private
),如您的示例所示,那么
ControlState* Device;
应该这样做。