<分区>
我正在为我大学的编码作业 (C++) 托管 DomJudge 服务器。作业通常是运动编程问题,但我们不希望学生使用 map 或 set 等 STL 功能。我们希望他们自己实现。因此,为此,我从 header 中删除了 STL_map.h
和 STL_set.h
。
这样做安全吗?我们可以选择更好的替代方案吗?
标签 c++
<分区>
我正在为我大学的编码作业 (C++) 托管 DomJudge 服务器。作业通常是运动编程问题,但我们不希望学生使用 map 或 set 等 STL 功能。我们希望他们自己实现。因此,为此,我从 header 中删除了 STL_map.h
和 STL_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/