我有模板實例化一個宏定義,看起來大約是這樣的:#include和copy&paste有什麼區別?
#define INSTANTIATE_TEMPLATE(typeName) \
template FooBarImpl<C##typeName>;
所以它並沒有真正做很多工作。 接下來,我對這個宏有大量的調用。
INSTANTIATE_TEMPLATE(OneType)
INSTANTIATE_TEMPLATE(AnotherType)
INSTANTIATE_TEMPLATE(TypeThree)
等等...... 這似乎工作正常。我只是試圖建立一個包括只包含那些最後幾行,並與
#include "instantiations.hpp"
取代了線。然而,這個新版本不編譯實例。看起來,當模板被實例化時,文件頂部的所有包含都是不可見的。
引述MS docs:
#include指令告訴預處理器把一個指定的文件的內容,如果這些內容已經在其中的指令出現的點源項目出現了。
因此,我認爲這是某種排序問題的方式#includes和宏由預處理器進行評估。但是它是如何工作的?發生了什麼?
我也嘗試徹底刪除宏並把模板FooBarImpl; ...文件中的定義和#include。相同的錯誤,所以可能不是訂購問題。 –
Sarien
你能否提供[SSCCE](http://sscce.org/)? – Angew
答案:沒有區別 – sellibitze