Другие языки программирования и технологии

[C++] #define

Как объединить дефайны, допустим есть:
#define MoveType_None 0;
#define MoveType_Left 1;
#define MoveType_Right 2;
#define MoveType_LeftRight 3;

Как сделать, чтобы можно было обращаться к ним так:
MoveType.None
MoveType.Left
etc.

Чтобы при вводе MoveType. появлялась подсказка со всеми возможными дефайнами.
Класс не хочу создавать, ведь это лишняя память.
#define - директива препроцессора, используемая для определения символьных констант, содержит идентификатор и символьную строку. Компилятор, встретив в исходном коде программы идентификатор, тупо, подставляет вместо него символьную строку, которая соответствует этому идентификатору.

enum - перечисление - множество поименованных констант, типа int. Каждая из констант может быть инициализирована обычным образом, если инициализация отсутствует, то первая константа имеет значение равное 0, каждая последующая увеличивает своё значение на единицу.

В обоих случаях ни о каком прямом и косвенном доступе не может быть и речи.

Что же касается инициализированных полей класса, то мало сделать их статическими, также требуется сделать их и константными.

....
class test {
public:
static const short MoveType_None = 0;
static const short MoveType_Left = 1;
};

int main() {
test::MoveType_Left;// теперь можно обратиться
return 0;
}

То же, но со структурой.. .

struct test {
static const short MoveType_None = 0;
static const short MoveType_Left = 1;
};

int main() {
test::MoveType_Left;
return 0;
}
Гггггг Лоллллллллллл
Гггггг Лоллллллллллл
89 485
Лучший ответ
enum религия использовать запрещает?
74 Rai
74 Rai
15 097
Михаил Балашников попробовал в первую очередь) никогда не пользовался enum'ом ^^
Сделал так:
enum MoveType
{
MoveType_None = 0,
MoveType_Left = 1,
MoveType_Right = 2,
MoveType_LeftRight = 3
};
Как обратиться к его элементам?
Согласен с предыдущим, но статические константы должны описываться за пределами описания класса.
Т. е. ,
struct test { // описание класса в заголовочном файле (*.H)
static const short MoveType_Nоne;
static const short MoveType_Left;
};
const short test::MoveType_Nоne = 0; // эта строка должна быть в другом файле (*.CPP), причём только в одном

Логичнее использовать enum
и namespace
namespace MoveType
{
enum { None = 0, Left = 1 };
}
или структуру/класс
struct MoveType
{
enum { None = 0, Left = 1 };
};

Обращаться через ::, а не через .

например, MoveType::Left
ИМ
Июнь Майский
12 356
Создай класс, и вызывай значения статистических элементов класса без создания экземпляра..
Kozimjon Akramov
Kozimjon Akramov
803