2

私のプログラムでは、テキストのブロックを画面に描画しており、特定のピクセルに対応するテキストを見つけたいと考えています。text_view私のアーキテクチャには、と の2 つのクラスがありdraw_deviceます。draw_device描画関数と、指定されたテキスト ブロックのサイズをピクセル単位で計算する関数を提供する抽象基本クラスです。text_view検索と再描画操作を高速化するために、テキストのブロックと行が画面上のどこにあるかに関する情報を格納するクラスです。

はピクセル情報を格納するためtext_view、必然的に の選択に依存しdraw_deviceます。異なるdraw_deviceものを使用すると、テキストのレンダリングが多少異なり、text_viewストレージが一貫性のない状態になる可能性があります。

私の質問は、この関係をどのように表現するのが最善ですか?

2 つのクラスのユーザーにそれを処理させ、draw_device呼び出された各関数の参照を渡すことができます。それらは常に同じタイプを渡す必要があり、さもdraw_deviceないと悪が起こります。

class text_view{
public:
    void rearrange_text(const draw_device &);
    int lookup_text(const draw_device &, int x, int y) const;
    void draw_text(draw_device &) const;
};

クラスのユーザーが寿命の問題を管理する必要があるという犠牲を払って、関数インターフェイスを簡素化するためにtext_viewへのネイキッド ポインターを保持できます。draw_device

class text_view{
    draw_device * device;
public:
    void rearrange_text();
    int lookup_text(int x, int y) const;
    void draw_text() const;
    void change_draw_device(draw_device *);
};

スタック割り当てなどの代わりにaを強制的に使用することを犠牲にして、ユーザーが寿命の問題を心配する必要がないように、a を保持できshared_ptrます。text_viewshared_ptrunique_ptr

が を所有するべきでshared_ptrはないと思うので、私は解決策が好きではありません。それは単なるユーザーです。text_viewdraw_device

4

0 に答える 0