LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Ваш ход, как научить php добавлять к структурам метаинформацию?

Там есть атрибуты, просто

#[MoyaInfa]
private int $field;

Но в С я действую по другому, например в метапроге для каждого типа свой цвет

#define metaprog_type_x \
  x(INT, "Целое", COLOR_BLUE) \
  x(BOOL, "Да/Нет", COLOR_GREEN) \
  x(FLOAT, "Дробное", COLOR_ORANGE) \
  x(STRING, "Строка", COLOR_MAGENTA) \
  x(VOID, "Пустота", COLOR_GRAY)

enum metaprog_type {
#define x(c, name, color) METAPROG_TYPE_ ## c,
  metaprog_type_x
#undef x
};

struct {
  const char *name;
  enum color color;
} metaprog_type_info[] = {  
#define x(c, name, color) {name, color}, 
  metaprog_type_x
#undef x
};
Готово, есть таблица с метаинформацией, и заполненный enum. Если таблица не нужна в runtime, ее можно не создавать а таким же способом сделать switch в коде.
void print_type(enum metaprog_type t)
{
  printf("Имя %s, цвет %s\n", metaprog_type_info[t].name, color_name(metaprog_type_info[t].color));
}

Исправление MOPKOBKA, :

Ваш ход, как научить php добавлять к структурам метаинформацию?

Там есть атрибуты, просто

#[MoyaInfa]
private int $field;

Но в С я действую по другому, например в метапроге для каждого типа свой цвет

#define metaprog_type_x \
  x(INT, "Целое", COLOR_BLUE) \
  x(BOOL, "Да/Нет", COLOR_GREEN) \
  x(FLOAT, "Дробное", COLOR_ORANGE)

enum metaprog_type {
#define x(c, name, color) METAPROG_TYPE_ ## c,
  metaprog_type_x
#undef x
};

struct {
  const char *name;
  enum color color;
} metaprog_type_info[] = {  
#define x(c, name, color) {name, color}, 
  metaprog_type_x
#undef x
};
Готово, есть таблица с метаинформацией, и заполненный enum. Если таблица не нужна в runtime, ее можно не создавать а таким же способом сделать switch в коде.
void print_type(enum metaprog_type t)
{
  printf("Имя %s, цвет %s\n", metaprog_type_info[t].name, color_name(metaprog_type_info[t].color));
}

Исправление MOPKOBKA, :

Ваш ход, как научить php добавлять к структурам метаинформацию?

Там есть атрибуты, просто

#[MoyaInfa]
private int $field;

Но в С я действую по другому, например в метапроге для каждого типа свой цвет

#define metaprog_type_x \
  x(INT, "Целое", COLOR_BLUE) \
  x(BOOL, "Да/Нет", COLOR_GREEN) \
  x(FLOAT, "Дробное", COLOR_ORANGE)

enum metaprog_type {
#define x(c, name, color) METAPROG_TYPE_ ## c
  metaprog_type_x
#undef x
};

struct {
  const char *name;
  enum color color;
} metaprog_type_info[] = {  
#define x(c, name, color) {name, color}, 
  metaprog_type_x
#undef x
};
Готово, есть таблица с метаинформацией, и заполненный enum. Если таблица не нужна в runtime, ее можно не создавать а таким же способом сделать switch в коде.
void print_type(enum metaprog_type t)
{
  printf("Имя %s, цвет %s\n", metaprog_type_info[t].name, color_name(metaprog_type_info[t].color));
}

Исправление MOPKOBKA, :

Ваш ход, как научить php добавлять к структурам метаинформацию?

Там есть атрибуты, просто

#[MoyaInfa]
private int $field;

Но в С я действую по другому, например в метапроге для каждого типа свой цвет

#define metaprog_type_x \
  x(INT, "Целое", COLOR_BLUE) \
  x(BOOL, "Да/Нет", COLOR_GREEN) \
  x(FLOAT, "Дробное", COLOR_ORANGE)

enum metaprog_type {
#define x(c, name, color) METAPROG_TYPE_ ## c
  metaprog_type_x
#undef x
};

struct {
  const char *name;
  enum color color;
} metaprog_type_info[] = {  
#define x(c, name, color) {name, color}, 
  metaprog_type_x
#undef x
};
Готово, есть таблица с метаинформацией, и заполненный enum. Если таблица не нужна в runtime, ее можно не создавать а таким же способом сделать switch в коде.
void print_type(enum metaprog_type t)
{
  printf("Имя %s, цвет %s\n", metaprog_type_info[t].name, color_name(metaprog_type_info[t].color));
}

Исходная версия MOPKOBKA, :

Ваш ход, как научить php добавлять к структурам метаинформацию?

Там есть атрибуты, просто

#[MoyaInfa]
private int $field;

Но в С я действую по другому, например в метапроге для каждого типа свой цвет

#define metaprog_type_x \
  x(INT, "Целое", COLOR_BLUE) \
  x(BOOL, "Да/Нет", COLOR_GREEN) \
  x(FLOAT, "Дробное", COLOR_ORANGE)

enum metaprog_type {
#define x(c, name, color) METAPROG_TYPE_ ## c
  metaprog_type_x
#undef x
};

struct {
  const char *name;
  enum color color;
} metaprog_type_info[] = {  
#define x(c, name, color) {name, color}, 
  metaprog_type_x
#undef x
};
Готово, есть таблица с метаинформацией, и заполненный enum. Если таблица не нужна в runtime, ее можно не создавать а таким же способом сделать switch в коде.