template<typename OutputIterator>
void BlitSurface::ExtractFrames(OutputIterator it,
int frame_width, int frame_height,
int frames_per_row, int frames_per_column,
bool padding) const
{
SDL_Surface ** temp_surf = SDL_Ex_ExtractFrames(_surface, frame_width, frame_height, frames_per_row, frames_per_column, padding);
int surface_count = frames_per_row * frames_per_column;
for(int i=0; i<surface_count; ++i)
{
BlitSurface bs;
bs._surface = temp_surf[i];
*it = bs;
++it;
}
delete [] temp_surf;
}
私はこの機能を持っていますが、これはうまく機能します。唯一の問題は、コピーコンストラクターを呼び出さないことです。これは、サーフェス全体をコピーし、ポインターをコピーするだけでよいためです。デフォルトのコンストラクターを使用してから、次のようにメンバー_surfaceをtemp_surface[i]に設定します。
for(int i=0; i<surface_count; ++i)
{
it->_surface = temp_surf[i];
++it;
}
これは通常のイテレータでは機能しますが、挿入イテレータでは機能しません。両方で機能するように修正するにはどうすればよいですか?