2012-03-14 7 views
1

私はC++のスターターであり、私は単純なOpenGLアプリケーションを開発しようとしています。私はちょうどそのコード行が何を知りたいと思った、何が:(メンバーメソッド名)はC++で行う

::glutDisplayFunc(myPixmap::drawCallback); 

関数自体を無視:インターネット上でいくつかのコードを見て、私はこれが見つかりました。それは機能を呼びますか?私はそれはおそらく愚かな質問ですけど、私は

+1

':: +を取っていない、最も可能性の高い静的メソッド関数である'いくつかのエキゾチックな顔文字(OK、貧しい冗談)のように見えます。しかし、 ':: '自体は正しい名前空間 –

答えて

5

::は、スコープ解決演算子である答えを見つけることができません。

コンテナ(名前空間またはクラス)の名前が、その前に表示された場合、それはコンパイラが唯一の指定された識別子のために、そのコンテナの内側に見えるようになります。これは、クラスの外部のクラスの静的メンバーを参照する方法です。

それが最初に表示された場合は、前の名前なし、それがグローバル名前空間に見えることを意味します。

サンプルコードには両方の用途が含まれているようです。コード行は::glutDisplayFuncです。しかし、他の関数、myPixmap::drawCallbackは呼び出されません。そのアドレスは後で保存されます。

+0

@MooingDuckにあなたを指す:しかし、おそらく彼は、' myPixmap :: drawCallback' –

+0

[OK]を、あなたはそんなに – XaitormanX

+0

@MooingDuckに感謝話していた。そのコード行が '呼び出す:: glutDisplayFunc'しかし、他の機能。 。。、 'myPixmap :: drawCallback'は、呼び出されません。そのアドレスは、後のために保存されて –

2

はい、関数を呼び出します。先頭の「::」は、関数がグローバル名前空間内になければならないことを意味します。例えば:

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が、コンテキストに依存し、この場合にグローバル関数、コール - 異なる文脈では、それは代わりに、名前空間内の関数を呼び出すことができます。先頭の::を使用すると、コンテキストに関係なく、グローバル関数のみを別の名前空間で呼び出すことはできません。

+0

[OK]を、これは注目に – XaitormanX

+0

も価値があるコードを理解するために多くのことができますそのコードは、「使用して名前空間のX;」含まれている場合に宣言し、不適格なコールはあいまいになります。 –

0

glutDisplayFuncは、現在のウィンドウの表示コールバックを設定します。 GLUTがウィンドウの通常のプレーンを再表示する必要があると判断すると、ウィンドウの表示コールバックが呼び出されます。コールバックの前に、現在のウィンドウが再表示が必要なウィンドウに設定され、オーバーレイ表示コールバックが登録されていない場合、使用中のレイヤーは通常のプレーンに設定されます。表示コールバックはパラメータなしで呼び出されます。あなたのケースでは

は、myPixmapは:: drawCallbackは(パラメータなし、

関連する問題