模板类是众多可能的类,所以我问我:预处理器指令
#ifndef MY_CLASS
#define MY_CLASS
template<typename T>
class My_Class
{};
#endif
有必要吗?
最佳答案
包含防护可防止重复包含同一文件。您需要它们来防止翻译单元包含以下非法定义:
template <typename T> class My_Class { };
template <typename T> class My_Class { };
// Error: redefinition of ‘class Foo<T>’
重复包含很容易发生。例如,考虑这样一种情况,您包含 A
和 B
,并且由于某些未记录的原因,A
已经包含 B
。您可能无权从显式包含中省略 B
,但也不应要求 A
不包含它。只有使用包含防护(或某些等效机制)才能使这样的文件结构成为可能。
简而言之:您可以有重复的声明,但在一个翻译单元内只能有一个定义。
反例:以下是合法的:
template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo { };
int main() {}
关于c++ - 模板类和预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019224/