Удаление карты и набор из заголовков

Я размещаю сервер DomJudge для назначения кодирования (C ++) в моем колледже. Задания обычно являются проблемами спортивного программирования, но мы не хотим, чтобы студенты использовали такие функции STL, как карта или набор. Мы хотим, чтобы они реализовали их самостоятельно. Так что для этого я удалил stl_map.h а также stl_set.h из заголовков.

Это безопасно сделать? Есть ли лучшие альтернативы, которые мы можем выбрать?

1

Решение

Я бы не стал убирать заголовки. Вместо этого вы можете проверить заголовки, которые вы хотите «отключить», и посмотреть, что включает в себя охранники, которые он использует. Например, 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__таким образом, содержимое заголовка не будет обработано (так как защита включения будет уже определена), но опять же — это можно легко сделать #undef __STL_MAP_H__ перед #include,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]