そこで、Operationというクラスを使用してキーボード入力を処理するC ++ / OpenGLプログラム(Visual Studio 2010を使用)を作成しようとしています。重要なのは、C ++とOpenGLの両方に慣れていないので、いくつかのことを学ぶことです。
配列'boolkeysDown [256]'を使用して、押されたキーを格納しています。同様に、これらのキーを操作するために、一連の操作'Operation *keyOps[256]'を作成したいと思います。
そして、ここに私の問題があります。これらのキーのほとんどは操作がないので、まったく何もしないOperationクラスが必要ですが、必要なのは、異なるファイルが使用できる1つのグローバルインスタンス/ポインターだけです。
今私がやりたかったのは、どういうわけかこの「操作なし」クラスの単一のインスタンスを作成し、各ファイルで宣言する必要なしに、このヘッダーを含むすべてのファイルで使用できるようにすることでした。(NULLのようなもので、Operationクラスの形でのみ)
これまでのところ、私の「解決策」は、このような名前空間を使用することでした。
(operation.h)
#ifndef _OPERATION_H
#define _OPERATION_H
#include <iostream>
#include <GL\glut.h>
namespace operations{
class Operation{
protected:
std::string _name;
public:
Operation(std::string name) : _name(name){}
virtual void operate()=0;
std::string getName(){return _name;}
};
(...)
class OPnop: public Operation{
public:
OPnop(): Operation("No operation"){}
void operate(){}
};
static OPnop OPNOP;
Operation* nop(); //implemented in .cpp > {return &OPNOP;}
(...)
};
#endif
他のファイルは、operations :: nop()関数を使用して、OPNOPインスタンスへのポインターを取得できます。テストして動作しましたが、これがバックグラウンドで意図したとおりに動作するかどうかはわかりません。
私はグローバル変数の外部変数と静的使用法を探していましたが、おそらくそれをすべて理解しておらず、自分の問題に関連する答えを見つけることができませんでした。私が間違っていない場合は、外部変数を他のファイルでも宣言する必要がありますが、staticはそれを含むファイルごとに異なる変数を作成します。
だから私の質問は、このヘッダーを含むすべてのファイルが関数を使用せずに同じ一意のインスタンスに直接アクセスできるように、この「操作なし」を宣言/インスタンス化する方法はありますか?