对于某一些算法、过程,有相同的骨架,但可能有不同的输入、输出,如何设计模式

对于某一些算法、过程,有相同的骨架,但可能有不同的输入、输出,怎么设计模式?
比如做一个 文件夹之前同步的 的程序,要用到文件夹拷贝,或者是文件夹内容的比较。它们的功能不同,但共同点是都要对一个文件夹进行遍历。这些遍历的代码骨架基本是一样的,只是处理过程不一样。

首先想到的是虚函数继承。

class FindFiles
{
protected:
virtual doProcess(FileInfo f) = 0;
public:
virtual BOOL ScanFolder(const CString& strFolder)
{
while(bFindFile)
{
//对第一个找到的文件(夹),进行一个纯虚函数的操作
doProcess(FileInfo);
}
}
}

//可以继承它写一个"复制文件夹"类
class CopyFolder : public FindFiles
{
protected

virtual doProcess(FileInfo f)
{
//这里实现文件拷贝
}
}
/*

客户端调用CopyFolder::ScanFolder函数,就能实现文件夹下面的文件全部复制
*/
//但是,如何是想遍历文件夹,输出一个vector包含文件夹里所有文件的信息

class GetFilesInfo : public FindFiles
{
vector<FileInfo>& vt;

protected:
doProcess(FileInfo)
{
vt.push_back(FileInfo);
}
public:

virtual BOOL GetFilesInf(const CString& strFolder, vector<FileInfo>& vtf)
{
ScanFolder();
vtf=vt;//这样的话,vector就又被复制一次。效率不高。
}
}


想通过策略模式之类的,不知道能不能解决算法骨架一样,但输出想不同的方案。

大家有没有什么好建议?

------解决方案--------------------
class 处理文件策略类
{
public:
virtual void doProcess(FileInfo) = 0;
}

class GetFilesInfo : public 处理文件策略类
{
vector<FileInfo>& vt;//注意,这里是引用
public:
GetFilesInfo(vector<FileInfo>& _v):vt(v){}
virtual void doProcess(FileInfo)
{
vt.push_back(FileInfo);
}
}

class FindFiles
{
protected:
virtual doProcess(FileInfo f) = 0;
public:
virtual BOOL ScanFolder(const CString& strFolder, 处理文件策略类* p)
{
while(bFindFile)
{
p->doProcess(FileInfo);
}
}
}

------解决方案--------------------
http://www.codeproject.com/Articles/8843/Win32-file-name-iteration-STL-way
关于迭代器 可以参考下这个
------解决方案--------------------
上一个boost/C++2011的lambda/function就搞定了,不需要继承。