我试图禁止包含源文件中的头文件列表,从而防止对这些头文件中定义的类的依赖。
有一些检查标头防护宏的技巧(如下所示),但是,就我而言,要排除所有的标头使用
#pragma once
而不是标头防护。
#ifdef A_BANNED_HEADER_FILE_H
static_assert(false);
#endif
有没有办法在编译时强制包含 0?
附注为了避免对任何类的依赖,我可以在源文件中定义一个具有相同限定名称的类,并让重新定义错误在意外包含时尖叫。
阻止包含标头并不一定会阻止定义任何类。
但是您可以明确要求源文件中未定义类。
// foo.h must not be included, because class foo must not be defined!
// #include "foo.h"
template<typename T> concept is_defined = requires { sizeof(T); };
static_assert( !is_defined<class foo> );