我有一个模板实例化的宏定义,大约如下所示:
#define INSTANTIATE_TEMPLATE(typeName) \
template FooBarImpl<C##typeName>;
所以它并没有多大作用。 接下来我对该宏进行了大量调用。
INSTANTIATE_TEMPLATE(OneType)
INSTANTIATE_TEMPLATE(AnotherType)
INSTANTIATE_TEMPLATE(TypeThree)
等等... 这似乎工作正常。我只是尝试为仅包含最后几行的实例创建一个包含,并将这些行替换为
#include "instantiations.hpp"
但是,这个新版本无法编译。当模板被实例化时,文件顶部的所有包含内容似乎都是不可见的。
引用MS docs :
The #include directive tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.
所以我认为这是预处理器评估 #includes 和宏的方式的某种排序问题。但它到底是如何运作的以及发生了什么?
最佳答案
这太尴尬了。
问题是我的包含名称错误。有两个文件的名称几乎相同,我自动完成了错误的名称,但从未注意到。这些名称确实选择得很糟糕(我不知道另一个存在),仅在“...属性...”与“...属性...”方面有所不同。
我不太确定能从中得到什么。也许我应该使用“打开文档”快捷方式,而不是单击“打开”选项卡。
关于c++ - #include 和复制粘贴有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404049/