2013-01-22 47 views
2

我想引用一些不是由我維護的穩定的庫代碼。其實這是一些MFC代碼片段。如何用C++預處理程序包含文件的一部分#include

但是,每當我想包含代碼片段,我必須要整個文件,因此我必須包含其他內容,然後整個MFC ...結果是不可接受的。

目前,我將代碼片段複製/粘貼到我的項目中,但我感到可恥。我可以用C++預處理器引用文件的一部分嗎?

即使代碼與特定的MFC版本硬連接,它比在我的項目中複製它們要好。有了這樣的硬鏈接,我會知道它來自MFC,並節省我的時間來檢查它們。

是否有一些超級#include用法?


我們可以寫類似

#include "foo.h" line [12, 55) 

這意味着包括第22行至54 foo.h中

+1

是的 - 1)你可以用「#ifdef /#ifndef /#endif」來「阻止」你不想要的頭部分。當然,這意味着修改標題。 2)或者,您可以將需要的部分剪切/粘貼到新標題中。 – paulsm4

+3

如果你創建自己的頭文件並將其複製到該頭文件中(每個MFC版本一次),然後使用頭文件,它可能會工作得最乾淨,IMO。不是特別好,但比黑客攻擊系統提供的頭部更好(這是非常不得已的)。 –

+0

你正在談論包括標題的東西,是不是?或者應該是你試圖包含任何種類的實現代碼?對於後者:不要這樣做,但建立一個對象來鏈接。 – alk

回答

6

哪些做的是寫的#ifdef截面在他們的頭,讓包括僅獲取特定部分的文件。我不知道你的MFC文件是否有這些文件,但你可以查看它並使用任何現有的文件或自己寫。

頭通常是這個樣子

#ifdef USE_FANCYPANTS 
bool hasFancyPants(); 
#endif 

#ifdef USE_COOLSTUFF 
void doCoolStuff(); 
#endif 

而且你的包含文件則包括前使用#define。

#define USE_FANCYPANTS 
#include "header.hpp" 

那麼你就只能得到hasFancyPants(),而不是doCoolStuff()

0
  • 您可以使用條件編譯來inlcude /排除你不需要的東西。您必須更改源碼略微,並修改項目設置。
  • 可以使用typedef關鍵字,該關鍵字可以爲MFC和非MFC定義不同的類型,和/或特定於項目設置和遺留代碼。
  • 您可以將整個東西放在DLL或.LIB(具有代碼,而不僅僅是聲明)中,並將鏈接器編譯指示置於頭文件本身中。