-2

私はマイクロコントローラーを使用しており(つまり、静的メモリ割り当てしかできないことを意味します)、継承を使用しようとしています.....

抽象クラスImageと抽象クラスがあるとしFontます。のインスタンスは、次のように、関数で指定されたのベースオフをFont返すことができます。Imagechar

Font* mf;
Image* image = mf->GetImage("a");

GetImageここでの本当の問題は、関数に対して何をすべきかわからないことです。

問題はこれです: C++ では、抽象クラスのメンバーを持つためには、それをポインターとして使用する必要があります。したがって、私のジレンマはFont、新しいを作成してImageから返したいということです。

新しく作成されたオブジェクトへのポインターを返す場合はImage、一時オブジェクトへの参照を返しています。

Image* FontImpl::GetImage(char c){
  return &ImageImpl(c);  //This object is destroyed once this function exits
}

そして、私が戻った場合、次のような実際の型を返そうとします:

Image FontImpl::GetImage(char c){
  return ImageImpl(c);   //Cannot cast from ImageImpl to Image
}

では、この種の静的メモリの問題にはイディオムか何かがありますか?

4

1 に答える 1

1

動的割り当てを使用するのが最も簡単ですが、それが不可能な場合は、インスタンスを関数の外のどこかに保存する必要があります。

static ImageImpl image;

Image& FontImpl::GetImage(char c) {
  image = ImageImpl(c);
  return image;
}
于 2016-05-12T01:43:17.837 に答える