我有一个程序可以制作一个随机文件,其中包含它拥有的项目数,并且每个文件都有特定数据类型的随机项目,例如,名为“ integers”的文件为“ 5 3 7 10 232 2”,第一个数字是其后的项目数,然后是随机整数。名为“ strings”的文件是“ 3颌骨kks owoiwow”,以此类推,对于char和double也是如此。
我实现了用于排序算法的实现,并希望以相同的实现通过以下方式输入具有不同数据类型的文件:“ ./ a.out <字符串”或“ ./a.out <整数”。排序算法已经准备好处理不同的数据类型,但是无法读取不同的输入以存储在不同类型的向量中。我已经阅读了很多有关类型名称的信息,但仍然无法做到这一点。
TL; DR我想输入一个具有非描述性名称的文件,例如'hey.random_file',知道文件的结构首先是项目的数量,然后是数据类型仍然未知的项目,如何测试数据类型(用于字符串,int,double或char),然后以不需要我重复代码的方式继续制作测试数据类型的向量
这是主要函数的样子,heap_sort()函数经过测试可与字符串,char,double和int一起使用,但我无法读取不同数据类型的输入。
size_t n;
if(print_input)
cout<<"Array size: ";
cin>>n;
vector<int> arr(n);
if(print_input)
cout<<"Array elements: ";
for(size_t i = 0; i < n; i++)
cin>>arr[i];
heap_sort(arr);
if(print_input)
cout<<"Sorted array: ";
for(size_t i = 0; i < n; i++)
cout<<arr[i]<<' ';
答案 0 :(得分:1)
使用功能模板编写一个可以完成所有工作的功能模板:
template<typename T>
vector<T> input(istream&);
template<typename T>
void output(const vector<T>&);
template<typename T>
void do_sort(istream& s)
{
auto v = input(s);
sort(v);
output(v);
}
然后在运行时使用显式实例化:
int main()
{
// ...
ifstream is(filename);
if (filename == ”integers”)
do_sort<int>(is);
else if (filename == “strings”)
do_sort<string>(is);
// ....
}