2

「OpenGLCamera」というクラスがあり、カメラを必要とする別のクラスがあるため、現時点では(クラスが型として使用されているため)次のように OpenGLCamera を持っています。

void draw(const OpenGLCamera& camera);

しかし、私はそれをもっと一般的にしたいので、そうであってほしい

void draw(const SomeCamera& camera);

そして、この「SomeCamera」はもちろんOpenGLCameraへのポインタ/参照または何かでなければなりません!

「Visual_settings」というクラスがあります..これを実現するには継承を使用する必要があると聞きました...しかし、方法がわかりません..これを行う方法は? クラス Visual_Settings? それを基本クラスにします...そして??

Visual_Settings.h

#include "OpenGLCamera.h"
class Visual_Settings : public OpenGLCamera
{

};

前もって感謝します

4

2 に答える 2

1

探しているジェネリック型は でありSomeCameraOpenGLCameraこの型から派生する必要がありますSomeCamera。それができない場合は、アダプターパターンを使用する必要があります。これは、他のタイプのカメラを使用している場合に意味があります。

    class SomeCamera
    {
    public:
        virtual void Dowork()=0;
    };

    class OpenGLCamera : public SomeCamera
    {
    public:
        virtual void Dowork() override
        {
            //use camera
        }
    };

//アプローチ 2 (ブリッジ パターン): OpenGLCamera を変更できない場合:

//***適切なコンストラクタ/デストラクタを使用し、必要に応じて基本クラスのコンストラクタを初期化します

    class SomeCamera
    {
    public:
        virtual void Dowork()=0;
    };

    class OpenGLCamera 
    {
    public:
       void OpenGlDowork() 
        {
            //use camera
        }
    };

    class OpenGLCameraAdapter : public SomeCamera, OpenGLCamera
    {
    public:
        virtual void Dowork() override
        {
            //use camera
            OpenGlDowork();

    }
};
于 2013-04-04T09:45:03.663 に答える
0
  1. OpenGLCameraから継承する必要がありますSomeCamera
  2. SomeCameraでオーバーライドされるインターフェイスが必要OpenGLCameraです。
于 2013-04-04T09:43:48.487 に答える