2014-03-12 118 views
0

我有以下問題:一個屬性爲不同類型的

 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個設備屬性不同類型。 (加上ocmpiler不喜歡它)...

這個問題的解決方案是什麼:如何爲多種類型擁有一個屬性?

我玩過許多不同的模板想法,但似乎從來沒有完全實現它......我需要一隻助手來開闢一條新路。

使用我的一個例子上面會:

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布爾Up爲true ...只是如等

+1

你試圖解決什麼是真正的問題?現在,枚舉就足夠了... –

+0

'void * Device;' – Ashalynd

+0

OMG!這個怎麼用?請解釋更多:D IT COMPILES ATLEAST !!! – Jimmyt1988

回答

0

如果了ControlState-有望成爲基類中的所有設備(請確保使用public訪問符,因爲它默認爲private),作爲你的榜樣建議,然後

ControlState* Device; 

應該做的伎倆。

相關問題