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;
}
这适用于普通迭代器,但不适用于插入迭代器。我怎样才能修复它以同时适用于两者?