1

私は C++ を使用して組み込みハードウェアの開発を行っており、const (ROM) 構造体へのポインターを使用してオブジェクトのサイズを最小限に抑えることがよくあります。

クラス コンストラクターに渡されたポインターを取得したら、渡したオブジェクトに基づいてコンパイラーに別の ROM オブジェクトを作成させますが、1 つまたは 2 つの引数を変更してから、親クラスのコンストラクター (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では実行できないようです。しかし哲学的には私は自分自身に問い続けます:fn(..。 、"眉犬"、...)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 に答える