Как объединить дефайны, допустим есть:
#define MoveType_None 0;
#define MoveType_Left 1;
#define MoveType_Right 2;
#define MoveType_LeftRight 3;
Как сделать, чтобы можно было обращаться к ним так:
MoveType.None
MoveType.Left
etc.
Чтобы при вводе MoveType. появлялась подсказка со всеми возможными дефайнами.
Класс не хочу создавать, ведь это лишняя память.
Другие языки программирования и технологии
[C++] #define
#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;
}
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;
}
enum религия использовать запрещает?
Согласен с предыдущим, но статические константы должны описываться за пределами описания класса.
Т. е. ,
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
Т. е. ,
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
Создай класс, и вызывай значения статистических элементов класса без создания экземпляра..
Похожие вопросы
- [C/C++] Так что же плохого в #define ?
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.
- Зачем нужен C++, если есть C?
- Помогите срочно C#
- Помогите исправить ошибку в программе (c++).
- Ещё тупой вопрос по C++ :)
- Почему многие отдают предпочтение C++ а не C# ?
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- Как в C++ приравнять переменную и текст? А то такую запись нельзя. А без этого задачу не решить
- Язык программирования C.
Сделал так:
enum MoveType
{
MoveType_None = 0,
MoveType_Left = 1,
MoveType_Right = 2,
MoveType_LeftRight = 3
};
Как обратиться к его элементам?