1

我正在使用 C++ 开发嵌入式硬件,并且我经常使用指向 const (ROM) 结构的指针来最小化对象大小。

当我得到一个传递给我的类构造函数的指针时,我希望编译器根据我传递的对象创建另一个 ROM 对象,但更改了一个或两个参数,然后调用父类构造函数 (Display_Element)。关于如何做到这一点的任何想法?

由于可以在参数列表中声明 const 字符串,但我可能还有一种方法可以在参数列表中声明 const 结构。

我想做这样的事情,(这在 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;
}

谢谢

4

1 回答 1

0

好吧,看来我想做的事情确实是非法的,不能在 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;
于 2013-03-18T12:15:48.810 回答