Более или менее то, что предлагает название. Хотя я еще не использую 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 ++.Один из вариантов, о котором я подумал, - это объявить тип в другом пространстве имен, а затем ввести его, используя , используя
:
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?
Будет ли это правильным способом заставить его работать? Это заставит использовать директивы
, что также принудительно установит определенный порядок директив #include
. Правильно ли я ожидал, что никакой код до C ++ 0x не будет запрашивать тип nullptr_t
с пространством имен (например, в качестве типа аргумента функции)? Будет ли это действительно работать «чувствовать себя родным», если это делается таким образом?
В качестве дополнения, приветствуется или осуждается попытка перенести некоторые изящные вещи C ++ 0x на C ++ для лучшей совместимости и кодирования? Тем временем я интегрировал это решение и другие, над которыми я работаю , в часть программного обеспечения, которое будет выпущено .