Более или менее то, что предлагает название.Хотя я еще не использую C ++ 0x , я хотел бы быть готовым к тому, когда это произойдет, и я также хотел бы уменьшить объем кода, который мне нужно переписать, чтобы использовать некоторые из егообъекты.Таким образом, я могу получить обратную и прямую совместимость за один раз.
Один из самых интересных, которые я нашел, это nullptr
, который я использовал чаще всего в последнее время.
После проверки "Официального обходного пути" и предложения Мейера я решил, что хотел бы использовать это и в моих программах на C ++, и в будущих программах на C ++ 0x.Вторая часть проста - будучи ключевым словом, nullptr
будет просто поддерживаться.Но первая часть вызывает у меня некоторый дискомфорт.
Предложение Мейерса работает следующим образом:
class nullptr_t { // ← this is my issue
// definition of nullptr_t
} nullptr = { };
Проблема с этим предложением состоит в том, что оно объявляет тип, который будет объявлен как std::nullptr_t
в соответствии с требованиями C ++ 0x.Это означает, что для обходного пути «чувствовать себя нативным» это нужно сделать, открыв пространство имен std::
, чтобы добавить тип. У меня есть понимание, что в программе на C ++ запрещено (в отличие от добавления специализаций , что, по-видимому, является недовольным предупреждением).
Я хочу использовать nullptr
удобным И легальным способом в программе на C ++.Один из вариантов, о котором я подумал, - объявить тип в другом пространстве имен и затем ввести его, используя using
:
namespace mylibrary {
class nullptr_t {
....
} nullptr = { };
// end namespace
}
// These would have to go in the header file.
using mylibrary::nullptr;
using mylibrary::nullptr_t; // apparently this is necessary as well?
. Будет ли это правильным способом заставить его работать?Это вызовет директивы using
, что также предписывает определенный порядок директив #include
.Могу ли я ожидать, что никакой код до C ++ 0x не будет запрашивать тип nullptr_t
с пространством имен (например, в качестве типа аргумента функции)?Будет ли это действительно работать "чувствовать себя родным", если это будет сделано таким образом?
В качестве дополнения, приветствуется или не одобряется попытка перенести некоторые изящные вещи C ++ 0x в C ++ длялучшая совместимость и кодирование?Тем временем я интегрировал это решение и другие, над которыми работаю , в часть программного обеспечения, которое будет выпущено .