2013-08-01 104 views
0
#include "d3dApp.h" 
#include <WindowsX.h> 
#include <sstream> 

namespace 
{ 
    // This is just used to forward Windows messages from a global window 
    // procedure to our member function window procedure because we cannot 
    // assign a member function to WNDCLASS::lpfnWndProc. 
    D3DApp* gd3dApp = 0; 
} 

LRESULT CALLBACK 
MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    // Forward hwnd on because we can get messages (e.g., WM_CREATE) 
    // before CreateWindow returns, and thus before mhMainWnd is valid. 
    return gd3dApp->MsgProc(hwnd, msg, wParam, lParam); 
} 

我很好奇這種在C++中使用的命名空間。我開始閱讀關於命名空間的文檔,並且我看到很多示例調用名稱空間的名稱,如「首先命名空間」,但沒有任何東西在命名空間聲明之後沒有任何東西,比如這個。在C++中使用名稱空間?

+1

這裏有問題嗎? – kba

+3

這是一個未命名的命名空間http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions – Yang

+1

這是一個匿名命名空間,我認爲。我記得有人告訴我,上面是C++的方式有全局變量的非外部鏈接(而在C中,你聲明它們是靜態的)。 – dreamlax

回答

1

這是一個匿名或未命名的命名空間。命名空間中的項目(本例中僅爲gd3dApp)在翻譯單元中可見,但不能在外部參考,因爲沒有用於限定它們的名稱。

注意:這是的不是防止外部聯繫。看看這裏:http://msdn.microsoft.com/en-us/library/yct4x9k5(v=vs.80).aspx

雖然未命名名稱空間中的實體可能具有外部鏈接,但它們通過其翻譯單元唯一的名稱進行有效限定,因此永遠無法從其他任何翻譯單元看到。

這種技術是略優於static,因爲它也適用於typedef秒(不能宣佈static)。

相關問題