Макрос, который проверяет требования std::vector
У меня есть неизменный класс - все участники const
, Поскольку он неизменный, нет конструктора по умолчанию и назначения копирования. В C++11 я использую этот класс в std::vector
без проблем.
Теперь мне нужно скомпилировать код в среде, которая поддерживает только C++03. Очевидно, мой класс не CopyAssignable, а C++ 03 std::vector
требует этого, я не могу поместить экземпляры класса в вектор.
Поскольку код будет поддерживаться на дружественных для C++11 компиляторах и компилироваться и запускаться только в среде C++ 03, я подумал, что самый простой способ сделать это - удалить const
модификатор в C++ 03. Это сделает класс CopyAssignable и будет работать в C++03. Конечно, в C++11 я все еще хочу, чтобы класс был неизменным.
Я просмотрел длинный список макросов Boost C++11, но не смог найти ни одного, который бы сообщал мне, требуются ли в std::vector типы CopyAssignable.
Есть ли способ сделать это, или я должен просто ввести свой собственный макрос, который будет установлен во время компиляции?
1 ответ
Вероятно, проще всего просто проверить версию C++; #if __cplusplus < 201103L
должно быть достаточно. Предположительно, нет макроса Boost, проверяющего это, потому что все компиляторы C++11 совместимы в этом отношении.