Я разрабатываю для встроенного оборудования с использованием C ++, и я часто использую указатели для const (ROM) структур, чтобы минимизировать размеры объектов.
Когда я получаю указатель на конструктор моего класса, я хочу, чтобы компилятор создал другой объект ПЗУ на основе того, который я передал, но с измененным одним или двумя аргументами, а затем просто вызвал конструктор родительского класса (Display_Element). Есть идеи, как это можно сделать?
Так как константная строка может быть объявлена в списке параметров, я, хотя, возможно, мог бы быть способ также объявить константную структуру в списке параметров.
Я хотел сделать что-то вроде этого (что запрещено в C ++)
Button::Button(const Colors_const* ecc, const Display_element_const* edc, const Element_const* eec, char* elabel,
Display_element* eparent, Screen* escreen) :
Display_element(ecc, cc,Display_element_const {
edc->xi+200,
edc->xf,
edc->yi,
edc->yf,
edc->font_size,
edc->image,
edc->image_x_offset,
edc->image_y_offset,
edc->label_x_offset,
edc->label_y_offset,
edc->mouse_down_ptr,
NULL,
edc->largura_borda_externa,
edc->borda_panel
},
eec,elabel,eparent,escreen) {
flags.largura_borda = 2;
//flags.largura_borda_externa = 3;
flags.borda_light_shadow = true;
flags.sliding_text = true;
flags.dont_paint_on_click = false;
}
Спасибо
Ну, похоже, что я хочу сделать, это действительно недопустимо и не может быть сделано в C. Но с философской точки зрения я продолжаю спрашивать себя: могу ли я выделить const char [n], записанный в списке параметров, таких как fn (…, «The brow dog», …) почему бы не выделить одинаковую структуру const? Если кто-то знает ответ, пожалуйста, напишите!
Обходной путь, который я нашел, состоит в том, чтобы сделать это каноническим способом: объявить структуру const, а затем назначить соответствующий указатель на структуру (то, что я хотел сделать в функции Display_element в первую очередь). Это решает мою проблему, но не концептуальный вопрос, который я пытался сформулировать …
const Display_element_const new_ec = {
edc->xi+200,
edc->xf,
edc->yi,
edc->yf,
edc->font_size,
edc->image,
edc->image_x_offset,
edc->image_y_offset,
edc->label_x_offset,
edc->label_y_offset,
edc->mouse_down_ptr,
NULL,
edc->largura_borda_externa,
edc->borda_panel
};Button::Button(const Colors_const* ecc, const Display_element_const* new_edc, const Element_const* eec, char* elabel,
Display_element* eparent, Screen* escreen) :
Display_element(ecc, edc,eec,elabel,eparent,escreen) {
//previously dc = edc, assigned inside Display_element fn
dc = &new_ec;
Других решений пока нет …