#include和copy& amp;的区别是什么?糊?

时间:2013-10-16 12:57:14

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

我有一个模板实例化的宏定义,看起来大概如下:

#define INSTANTIATE_TEMPLATE(typeName) \
  template FooBarImpl<C##typeName>;

所以它并没有真正做多少。 接下来,我对这个宏进行了大量调用。

INSTANTIATE_TEMPLATE(OneType)
INSTANTIATE_TEMPLATE(AnotherType)
INSTANTIATE_TEMPLATE(TypeThree)

依此类推...... 这似乎工作正常。我只是尝试为实例化创建一个include,它只包含那些最后一行,并用

替换了这些行
#include "instantiations.hpp"

但是,这个新版本无法编译。在模板实例化时,似乎文件顶部的所有包含都是不可见的。

引用MS docs

  

#include指令告诉预处理器将指定文件的内容视为在指令出现点的源程序中出现这些内容。

所以我认为这是某种排序问题,#includes和宏由预处理器评估。但它是如何运作的以及发生了什么?

3 个答案:

答案 0 :(得分:1)

这很令人尴尬。

问题是我有包含错误的名称。有两个文件名几乎相同,我自动填写错误的名称,从未注意到。这些名字选择得很差(我不知道另一个名字存在),只是“......属性......”与“...... Attr ......”不同。

我不确定要从中拿走什么。也许我应该使用“打开文档”快捷方式而不是单击打开的选项卡。

答案 1 :(得分:0)

您必须在定义INSTANTIATE_TEMPLATE之后加入它。

答案 2 :(得分:0)

我认为Visual Studio正在尝试编译.hpp文件,就好像它是一个.cpp文件一样。当它自己编译时,当#included来自另一个文件时,它没有#includes。

拉出.hpp的属性,并确保在Configuration Properties - &gt;下。一般情况下,它将项目类型列为“C / C ++标题”。