c++ - 从标题中删除 map 和设置

标签 c++

<分区>

我正在为我大学的编码作业 (C++) 托管 DomJudge 服务器。作业通常是运动编程问题,但我们不希望学生使用 map 或 set 等 STL 功能。我们希望他们自己实现。因此,为此,我从 header 中删除了 STL_map.hSTL_set.h

这样做安全吗?我们可以选择更好的替代方案吗?

最佳答案

我不会费心删除标题。相反,您可以检查要“禁用”的 header 并查看它使用的包含防护措施。例如,STL_map.h 可能如下所示:

#ifndef __STL_MAP_H__
#define __STL_MAP_H__

// content ...

#endif /*__STL_MAP_H__ */

然后,你可以使用#error指令:

#ifdef __STL_MAP_H__
#  error "stl_map.h is forbidden in this assignment!"
#endif

#error directive使程序格式错误并导致当前翻译单元无法编译。


您必须考虑的一件事是在哪里插入#error。将它添加到源代码前是行不通的,因为包含的内容不会被捕获。追加可能有效,但请注意,#undef __STL_MAP_H__ 很容易做到。将它放在最后一个包含之后可能是个好主意。这完全取决于您希望/被允许如何处理源代码。

正如@PeterT 正确注意到的那样,您还可以添加到命令行 -D__STL_MAP_H__,因此不会处理 header 的内容(因为已经定义了 include guard),但同样 -在 #include 之前可以很容易地执行 #undef __STL_MAP_H__

关于c++ - 从标题中删除 map 和设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48764731/

相关文章:

C++ undefined reference

c++ - 断然阻止或阻止带有特定参数的对象实例化

c++ - 在 LLVM 中的两个 block 之间插入一个 block

C++ 将 char 签名加倍

c++ - 使用 ostringstream 将 double 格式化为字符串

c++ - 如何使用 Crypto++ 在 C++ 中解密字符串数据,其中使用 pyCrypto 在 Python 中加密的原始字符串

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 从 MAT Image 获取行数/列数

c++ - Geotiff坐标转换错误

c++ - 模板特化中缺少方法