Могу ли я переопределить встроенный тип внутри пространства имен?

#c #types #namespaces

#c #типы #пространства имен

Вопрос:

Я хотел бы переопределить встроенный тип bool внутри пространств имен и классов библиотеки, потому что они должны работать по-другому, но я хотел бы сохранить имя bool : ex::bool , ex::false , ex::true . Но мой компилятор не позволяет мне этого сделать, я попробовал что-то вроде этого :

 namespace ex {
    typedef uint8_t bool;
    const uint8_t false = 0;
}
  

Я также попытался добавить префикс bool и false с ex:: внутри определения, чтобы подчеркнуть тот факт, что он находится в ex, но это не работает. Что я мог бы сделать, чтобы иметь ex::bool ?

Ответ №1:

Что я мог бы сделать, чтобы иметь ex::bool ?

Ты ничего не можешь сделать. bool и false имеют значение, установленное спецификацией языка, и являются внутренними ключевыми словами. Вы не можете изменить их значение больше, чем вы можете изменить значение 0 , if или while .

Выбор других имен (таких как Bool и False ) — ваш единственный вариант.

Комментарии:

1. Могу ли я сохранить их значение, но поместить их в свое пространство имен для согласованности?

2. @linternetsansfil — Нет. Ключевые слова являются зарезервированными символами в языке. Вы не можете перенести их в другую область или действительно сделать с ними что-либо, кроме использования по назначению.