私はC++のスターターであり、私は単純なOpenGLアプリケーションを開発しようとしています。私はちょうどそのコード行が何を知りたいと思った、何が:(メンバーメソッド名)はC++で行う
::glutDisplayFunc(myPixmap::drawCallback);
関数自体を無視:インターネット上でいくつかのコードを見て、私はこれが見つかりました。それは機能を呼びますか?私はそれはおそらく愚かな質問ですけど、私は
私はC++のスターターであり、私は単純なOpenGLアプリケーションを開発しようとしています。私はちょうどそのコード行が何を知りたいと思った、何が:(メンバーメソッド名)はC++で行う
::glutDisplayFunc(myPixmap::drawCallback);
関数自体を無視:インターネット上でいくつかのコードを見て、私はこれが見つかりました。それは機能を呼びますか?私はそれはおそらく愚かな質問ですけど、私は
::
は、スコープ解決演算子である答えを見つけることができません。
コンテナ(名前空間またはクラス)の名前が、その前に表示された場合、それはコンパイラが唯一の指定された識別子のために、そのコンテナの内側に見えるようになります。これは、クラスの外部のクラスの静的メンバーを参照する方法です。
それが最初に表示された場合は、前の名前なし、それがグローバル名前空間に見えることを意味します。
サンプルコードには両方の用途が含まれているようです。コード行は::glutDisplayFunc
です。しかし、他の関数、myPixmap::drawCallback
は呼び出されません。そのアドレスは後で保存されます。
@MooingDuckにあなたを指す:しかし、おそらく彼は、' myPixmap :: drawCallback' –
[OK]を、あなたはそんなに – XaitormanX
@MooingDuckに感謝話していた。そのコード行が '呼び出す:: glutDisplayFunc'しかし、他の機能。 。。、 'myPixmap :: drawCallback'は、呼び出されません。そのアドレスは、後のために保存されて –
はい、関数を呼び出します。先頭の「::」は、関数がグローバル名前空間内になければならないことを意味します。例えば:
namespace X {
void whatever() {}
};
void whatever() {}
int main() {
whatever(); // calls the global function
::whatever(); // also calls global function
X::whatever(); // calls the function in the namespace
return 0;
}
(NOスコープ解像度で)whatever
が、コンテキストに依存し、この場合にグローバル関数、コール - 異なる文脈では、それは代わりに、名前空間内の関数を呼び出すことができます。先頭の::
を使用すると、コンテキストに関係なく、グローバル関数のみを別の名前空間で呼び出すことはできません。
[OK]を、これは注目に – XaitormanX
も価値があるコードを理解するために多くのことができますそのコードは、「使用して名前空間のX;」含まれている場合に宣言し、不適格なコールはあいまいになります。 –
glutDisplayFuncは、現在のウィンドウの表示コールバックを設定します。 GLUTがウィンドウの通常のプレーンを再表示する必要があると判断すると、ウィンドウの表示コールバックが呼び出されます。コールバックの前に、現在のウィンドウが再表示が必要なウィンドウに設定され、オーバーレイ表示コールバックが登録されていない場合、使用中のレイヤーは通常のプレーンに設定されます。表示コールバックはパラメータなしで呼び出されます。あなたのケースでは
は、myPixmapは:: drawCallbackは(パラメータなし、
':: +を取っていない、最も可能性の高い静的メソッド関数である'いくつかのエキゾチックな顔文字(OK、貧しい冗談)のように見えます。しかし、 ':: '自体は正しい名前空間 –