А возможно ли такое...
От: Аноним  
Дата: 02.07.04 13:25
Оценка:
Что бы в классе константы определялись автоматически, ну например так
#define ID_ENUM(nID) { nID = nID++ }:
Re: А возможно ли такое...
От: Lorenzo_LAMAS  
Дата: 02.07.04 13:28
Оценка:
А>Что бы в классе константы определялись автоматически, ну например так
А>#define ID_ENUM(nID) { nID = nID++ }:

Я может чего не понял, но вообще то имя элемента перечисления становится видимым после запятой:

enum{a = 0,/*вот здесь a видимо*/, b, /*вот здесь b видимо*/ c};
Of course, the code must be complete enough to compile and link.
Re: А возможно ли такое...
От: Аноним  
Дата: 02.07.04 13:52
Оценка:
Что бы в классе константы определялись автоматически, ну например так
#define ID_ENUM(nID) enum { nID = nID++ };

class AA
{
ID_ENUM(value)// value = 0
ID_ENUM(value1)//value1 = 1
};
Re[2]: А возможно ли такое...
От: Аноним  
Дата: 02.07.04 13:58
Оценка:
А>class AA
А>{
А>ID_ENUM(value)// value = 0
А>ID_ENUM(value1)//value1 = 1
А>};
Попробуй скомпилить.

Кстати, почему value 0, а value1 1 ?????
Re[2]: А возможно ли такое...
От: rus blood Россия  
Дата: 02.07.04 14:00
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Что бы в классе константы определялись автоматически, ну например так

А>#define ID_ENUM(nID) enum { nID = nID++ };

А>class AA

А>{
А>ID_ENUM(value)// value = 0
А>ID_ENUM(value1)//value1 = 1
А>};

Обфускация кода на этапе девелопмента?
Имею скафандр — готов путешествовать!
Re[3]: А возможно ли такое...
От: Аноним  
Дата: 02.07.04 14:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>class AA

А>>{
А>>ID_ENUM(value)// value = 0
А>>ID_ENUM(value1)//value1 = 1
А>>};
А>Попробуй скомпилить.

А>Кстати, почему value 0, а value1 1 ?????

Вопрос можно ли как-нибудь генерировать в классе константы(отличные от друг друга) автоматически?
Re[2]: А возможно ли такое...
От: maq Россия http://www.maqdev.com
Дата: 02.07.04 14:18
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Что бы в классе константы определялись автоматически, ну например так

А>#define ID_ENUM(nID) enum { nID = nID++ };

А>class AA

А>{
А>ID_ENUM(value)// value = 0
А>ID_ENUM(value1)//value1 = 1
А>};

А нельзя просто использовать enum внутри класса?

class AA
{
    enum 
    {
        value,
        value1
    };
}
... << Rsdn@Home 1.1.4 beta 1 >>
Re[4]: А возможно ли такое...
От: maq Россия http://www.maqdev.com
Дата: 02.07.04 14:19
Оценка:
А>Вопрос можно ли как-нибудь генерировать в классе константы(отличные от друг друга) автоматически?
Можно — используй enum
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: А возможно ли такое...
От: Аноним  
Дата: 02.07.04 14:28
Оценка: :)
Здравствуйте, maq, Вы писали:

maq>Здравствуйте, <Аноним>, Вы писали:


А>>Что бы в классе константы определялись автоматически, ну например так

А>>#define ID_ENUM(nID) enum { nID = nID++ };

А>>class AA

А>>{
А>>ID_ENUM(value)// value = 0
А>>ID_ENUM(value1)//value1 = 1
А>>};

maq>А нельзя просто использовать enum внутри класса?


maq>
maq>class AA
maq>{
maq>    enum 
maq>    {
maq>        value,
maq>        value1
maq>    };
maq>}
maq>


И что гарантировано value != value1???
Re[4]: А возможно ли такое...
От: LaptevVV Россия  
Дата: 02.07.04 14:30
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, maq, Вы писали:


maq>>Здравствуйте, <Аноним>, Вы писали:


А>>>Что бы в классе константы определялись автоматически, ну например так

А>>>#define ID_ENUM(nID) enum { nID = nID++ };

А>>>class AA

А>>>{
А>>>ID_ENUM(value)// value = 0
А>>>ID_ENUM(value1)//value1 = 1
А>>>};

maq>>А нельзя просто использовать enum внутри класса?


maq>>
maq>>class AA
maq>>{
maq>>    enum 
maq>>    {
maq>>        value,
maq>>        value1
maq>>    };
maq>>}
maq>>


А>И что гарантировано value != value1???

да. По умолчанию value = 0, А каждая следующая +1, то есть value1 = 1
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: А возможно ли такое...
От: rus blood Россия  
Дата: 02.07.04 14:31
Оценка: -1 :)
Здравствуйте, Аноним, Вы писали:


А>И что гарантировано value != value1???


Of course!!!
Имею скафандр — готов путешествовать!
Re[5]: А возможно ли такое...
От: Аноним  
Дата: 02.07.04 14:39
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, maq, Вы писали:


maq>>>Здравствуйте, <Аноним>, Вы писали:


А>>>>Что бы в классе константы определялись автоматически, ну например так

А>>>>#define ID_ENUM(nID) enum { nID = nID++ };

А>>>>class AA

А>>>>{
А>>>>ID_ENUM(value)// value = 0
А>>>>ID_ENUM(value1)//value1 = 1
А>>>>};

maq>>>А нельзя просто использовать enum внутри класса?


maq>>>
maq>>>class AA
maq>>>{
maq>>>    enum 
maq>>>    {
maq>>>        value,
maq>>>        value1
maq>>>    };
maq>>>}
maq>>>


А>>И что гарантировано value != value1???

LVV>да. По умолчанию value = 0, А каждая следующая +1, то есть value1 = 1
Так просто??? Не может того быть
Re[6]: А возможно ли такое...
От: LaptevVV Россия  
Дата: 02.07.04 14:51
Оценка:
Здравствуйте, Аноним, Вы писали:

maq>>>>А нельзя просто использовать enum внутри класса?


maq>>>>
maq>>>>class AA
maq>>>>{
maq>>>>    enum 
maq>>>>    {
maq>>>>        value,
maq>>>>        value1
maq>>>>    };
maq>>>>}
maq>>>>


А>>>И что гарантировано value != value1???

LVV>>да. По умолчанию value = 0, А каждая следующая +1, то есть value1 = 1
А>Так просто??? Не может того быть
enum — это перечислимый тип.
Фактически это ряд именованных целых констант. Причем, каждой ты можешь назначить конкретное значение. Например, месяцы ты можешь задать такими константами:

enum month = { jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec };

А потом объявить переменные:

month M = jan;

Более того, для enum разрешается перегрузка операций — я написал об этом джовольно подробено в своей книжке
"C++.Экспресс-курс", издательство БХВ-Петербург, 2004г.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: А возможно ли такое...
От: Sir Wiz Россия  
Дата: 04.07.04 08:06
Оценка: -1
Здравствуйте, LaptevVV, Вы писали:

LVV>Фактически это ряд именованных целых констант.

Вот это вызывает вопрос.

У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта)

В стандарте 7.2/1 написано, что это — именованные константы.

У вас написано, что это — именованные целые константы. Посмотрим:

enum{zero, one, two};
const int * pz = &zero; // Ба-бах!
const int * pz = (int *)&zero; // Всё-равно ба-бах!

Не похоже на константы. Дык, что же это на самом деле?
... << RSDN@Home 1.1.3 stable >>
Re[8]: А возможно ли такое...
От: Шахтер Интернет  
Дата: 05.07.04 01:10
Оценка: +1
Здравствуйте, Sir Wiz, Вы писали:

SW>Здравствуйте, LaptevVV, Вы писали:


LVV>>Фактически это ряд именованных целых констант.

SW>Вот это вызывает вопрос.

SW>У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта)


А причем здесь, до стандарта? Перечисления в C существуют с незапамятных времен. И никогда макросами они не были -- это полный бред.

SW>В стандарте 7.2/1 написано, что это — именованные константы.


Лучше сказать -- именованое константное значение.

SW>У вас написано, что это — именованные целые константы. Посмотрим:


SW>
SW>enum{zero, one, two};
SW>const int * pz = &zero; // Ба-бах!
SW>const int * pz = (int *)&zero; // Всё-равно ба-бах!
SW>

SW>Не похоже на константы. Дык, что же это на самом деле?

А ты не пробовал делать так?

const int * pz = &12345; // Ба-бах!
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[9]: А возможно ли такое...
От: Sir Wiz Россия  
Дата: 05.07.04 06:54
Оценка:
Здравствуйте, Шахтер, Вы писали:

SW>>У Джефа Элджера в "Нетривиальное программирование на С++" написано, что члены перечисления это макросы. Но язык С++ у Джефа Элджера зачастую от компиляторов со стандартами независимый. (Нет-нет, я его не упрекаю, книга вышла года за два до стандарта)

Ш>А причем здесь, до стандарта? Перечисления в C существуют с незапамятных времен. И никогда макросами они не были -- это полный бред.
Да, согласен. Так написано у Элджера. Упоминание С считаю некорректным, это всё-таки разные языки.

SW>>В стандарте 7.2/1 написано, что это — именованные константы.

Ш>Лучше сказать -- именованое константное значение.
Возможно. Но английским языком написано "named constants"

Ш>А ты не пробовал делать так?

Ш>
Ш>const int * pz = &12345; // Ба-бах!
Ш>

Стоп. Сарказм мне понятен, но 12345 это литерал интегрального типа (integer literal), описан в стандарте C++ 2.13.1
А вот словосочетание named constant упоминается в стандарте два раза и оба раза относительно перечислений. Описания того, что это такое, я не нашел, поэтому счёл возможным интерпретировать named constant, как нечто похожее на

const int zero = 0;

Чем не именованная константа?

Кто же возьмётся прояснить этот вопрос?
... << RSDN@Home 1.1.3 stable >>
Re[10]: А возможно ли такое...
От: Шахтер Интернет  
Дата: 06.07.04 00:12
Оценка:
Здравствуйте, Sir Wiz, Вы писали:

SW>Стоп. Сарказм мне понятен, но 12345 это литерал интегрального типа (integer literal), описан в стандарте C++ 2.13.1

SW>А вот словосочетание named constant упоминается в стандарте два раза и оба раза относительно перечислений. Описания того, что это такое, я не нашел, поэтому счёл возможным интерпретировать named constant, как нечто похожее на

SW>
SW>const int zero = 0;
SW>

SW>Чем не именованная константа?

SW>Кто же возьмётся прояснить этот вопрос?


Перечислители ведут себя подобно литералам. Т.е. с ними не связаны какие-либо объекты.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.