我曾经typedef vector<MyDatatype> ls;
通过仅更改 typedef 定义来启用列表和向量之间的切换。除了 sort 函数,所有的工作都很好,它对向量的实现方式不同。
void show(driver& ls)
{
ls.sort(compare); //this line gives error
driver::iterator iter=ls.begin();
int i=1;
while(iter!=ls.end())
{
cout<<i<<". "<<iter->name<<string(maxlength+1-(iter->name).size(),' ');
streamsize prec=cout.precision(2);
cout<<grade(*iter);
cout.precision(prec);
cout<<endl;
i++; iter++;
}
}
做类似的事情:
if(typeid(ls)==typeid(list<string>)) ls.sort(compare);
else if(typeid(ls)==typeid(vector<string>)) sort(ls.begin(), ls.end(), compare);
不会有任何好处。所以我的问题是:是否有可能测试类型并相应地使用合适的排序函数,还是我必须编写自己的排序函数(或者可能将向量转换为列表)?我找不到任何相关的线程。