c++ - #include 和复制粘贴有什么区别?

标签 c++ c++-cli c-preprocessor

我有一个模板实例化的宏定义,大约如下所示:

#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/

相关文章:

c# - 处理 Expression Blend 缺乏对 C++/CLI 项目的支持

c++ - 循环 std::unordered_map,序列总是我插入元素的序列?

c++ - 'Figure::Figure()' 的原型(prototype)与类 'Figure' 中的任何一个都不匹配

c++-cli - C++/CLI 的 Cppcheck 语法错误代码味道

c++ - C++/Clr 中 C++ 全局实例的多线程

visual-studio - 在预处理器中检测 ARM-64?

c++ - 调用了错误的构造函数

c++ - 用 64 位替换 32 位循环计数器会在 Intel CPU 上使用 _mm_popcnt_u64 引入疯狂的性能偏差

c++ - 乘法宏给出错误的答案

c - Variadic UNUSED 函数/宏