私のプログラムでは、テキストのブロックを画面に描画しており、特定のピクセルに対応するテキストを見つけたいと考えています。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_view
shared_ptr
unique_ptr
が を所有するべきでshared_ptr
はないと思うので、私は解決策が好きではありません。それは単なるユーザーです。text_view
draw_device