代码之家  ›  专栏  ›  技术社区  ›  DXZ

有没有一种方法可以防止在编译时包含没有头保护的头文件?

  •  3
  • DXZ  · 技术社区  · 6 月前

    我试图禁止包含源文件中的头文件列表,从而防止对这些头文件中定义的类的依赖。

    检查标头保护宏有一些技巧(如下所示),但在我的例子中,要排除所有使用的标头 #pragma once 而不是头部防护装置。

    #ifdef A_BANNED_HEADER_FILE_H
    static_assert(false);
    #endif
    

    是否有方法在编译时强制包含0?

    P.S.为了避免对任何类的依赖,我可以在源文件中定义一个具有相同限定名的类,并在意外包含时让重定义错误尖叫。

    1 回复  |  直到 6 月前
        1
  •  3
  •   Drew Dormann    6 月前

    阻止包含标头并不一定阻止定义任何类。

    但是,您可以明确要求在源文件中不定义类。

    // 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> );
    

    See it work in Compiler Explorer