А как насчет анонимных союзов?
В C я могу иметь это:
struct vardir_entry {
const uint16_t id;
const uint8_t sub;
const char *name;
const uint8_t type;
const union {
struct vardir_lookup lookup;
struct vardir_min_max_conf minmax;
};
const union {
const struct vardir_value_target_const const_value;
const struct vardir_value_target value;
};
};
И инициализируется так:
static const struct vardir_entry _directory[]{
{ .id = 0xefef, .sub = 0, .name = "test", .type = VAR_UINT32, .minmax = { .min = 0, .max = 1000 }, .value = VARDIR_ENTRY_VALUE(struct obj, &obj, member) }
};
Однако в g ++ даже с c ++ 14 это выдает такую же ошибку «извините, не реализованную». Нам нужно иметь возможность определять переменные C в C ++, когда мы хотя бы хотим модульно протестировать код C с помощью инфраструктуры тестирования C ++. Тот факт, что такая ценная функция от C не поддерживается, является позором.