我有一个模板实例化的宏定义,看起来大致如下:
#define INSTANTIATE_TEMPLATE(typeName) \
template FooBarImpl<C##typeName>;
所以它并没有真正做太多。接下来我对这个宏有很多调用。
INSTANTIATE_TEMPLATE(OneType)
INSTANTIATE_TEMPLATE(AnotherType)
INSTANTIATE_TEMPLATE(TypeThree)
等等......这似乎工作正常。我只是尝试为仅包含最后几行的实例创建一个包含并将这些行替换为
#include "instantiations.hpp"
但是,这个新版本无法编译。当模板被实例化时,文件顶部的所有包含似乎都是不可见的。
引用MS 文档:
#include 指令告诉预处理器处理指定文件的内容,就好像这些内容已经出现在源程序中指令出现的位置一样。
所以我认为这是预处理器评估#includes和宏的方式的某种排序问题。但它是如何真正起作用的,发生了什么?