2012-05-30 96 views
0

它是否存在執行鏈接時約束的任何方法 - 如果對象實例創建爲靜態而無需外部鏈接,或者反之亦然?檢查是否創建了沒有外部鏈接的對象

例如:

// test.cpp 

// correct 
namespace{ 
static MyObject obj; 
} 

//test.h 

struct Obj 
{ 
    // wrong 
    static MyObject m_obj; 
} 

在這種情況下連接錯誤作爲診斷信息是確定。

據我瞭解,在編譯時不可能創建類似的東西。

+0

你試圖找出什麼用途? – Nawaz

+0

很難說。一般來說,這是架構和代碼風格的要求。 –

回答

0

糟糕的方式,但你可以使用宏(我不認爲這是你所需要的)

#define MyObject MyObject 
... 
#ifdef MyObject 
#error somemessagethere 
#endif 

或是單純的聲明之前在.h文件中的extern鍵入

我記得,在函數之外使用的static關鍵字意味着變量/函數實例只應該存在於當前模塊中。

+0

德米特里,我知道。要求不是在當前模塊外部創建特殊類型的對象,因爲有時它會導致由難看的對象設計導致的難以檢測到的錯誤。關鍵是如果有人會忘記這個要求,就會在連接時間中否認它。 –

+0

現在我明白了原來的問題。 我沒有想法免除編寫自定義代碼分析工具或強制代碼審查實踐在你的團隊。因爲從C++的角度來看,描述「//錯誤」的行爲是絕對正確的。 –