不同类型的一个属性

时间:2014-03-12 23:58:49

标签: c++

我有以下问题:

        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只有布尔属性,KeyboardTouch(在这种情况下)可能只有FingerMovedUp()的输入方法然后会导致将ControlState bool Up设置为true ...但只是示例等。

1 个答案:

答案 0 :(得分:0)

如果期望ControlState是所有设备的基类(确保使用public访问说明符,因为默认为private),如您的示例所示,那么

ControlState* Device;

应该这样做。