C++加速 (Q 8-1) - 由另一个函数参数化的模板函数
C++ accelerated (Q 8-1) - Template function parameterised by another function
我在这里看到了一些关于模板函数的使用和《加速C++》(Koeing/Moo(一书中的问题的文章,但没有一篇回答我的问题,所以我希望你能提供帮助。
我正在努力解决的问题是;"我们编写的各种分析函数是第 6.2/110 节,具有相同的行为;它们的区别仅在于它们调用的用于计算最终成绩的函数。编写一个模板函数,按评分函数的类型进行参数化,并使用该函数评估评分方案。">
我仍处于学习的早期阶段,我真的很感激这个问题的一些帮助,因为我已经被困住了几个星期,而且谷歌搜索也没有帮助。我读到的所有内容都涉及引用或指针 - 这本书还没有涉及,所以我发现它更令人困惑。
我在下面包含了 3 个分析函数 - 我认为问题是要求我编写一个模板函数来替换所有 3 个。我编写了一个我认为可能有效的函数 - 见下文 - 但是当我尝试编译时遇到错误,因为使用所有原始分析函数的函数write_analysis无法处理我的模板函数。
我完全被困住了,非常感谢任何帮助。
我尽量不包含太多代码,所以我希望以下内容就足够了。
double median_analysis(const vector<Student_info>& students)
{
vector<double> grades;
transform(students.begin(), students.end(),back_inserter(grades), grade_aux);
return median(grades);
}
double optimistic_median_analysis(const vector<student_info>& students){
vector<double> grades ;
transform(students.begin(), students.end(), back_inserter(grades), optimistic_median) ;
return median(grades) ;
}
double average_analysis(const vector<Student_info>& students)
{
vector<double> grades;
transform(students.begin(), students.end(),back_inserter(grades), average_grade) ;
return median(grades);
}
我的模板函数;
template <typename F > double Tanalysis(F Func(const student_info&))
{
std::vector<double> grades ;
transform(students.begin(), students.end(), back_inserter(grades), Func) ;
return median(grades) ;
}
write_analysis功能;
void write_analysis(ostream& out, const string& name,
double analysis(const vector<student_info>&),
const vector<student_info>& did,
const vector<student_info>& didnt){
out << name << " : median(did) = " << analysis(did) <<
" : median(didnt) = " << analysis(didnt) << endl ;
}
在主.cpp调用如下;
write_analysis(cout, "median", median_analysis, did, didnt) ;
我不能说足够多,我会感谢对此的一些帮助。提前谢谢你。
我最终设法找到了解决方案的方法,并认为我会分享,以防其他人同样陷入困境。
#include<vector>
#include<algorithm> //transform
#include "student_info.h"
#include "median.h"
template <typename F>
double Tanalysis(F Func, std::vector<student_info> students)
{
std::vector<double> grades ;
transform(students.begin(), students.end(), back_inserter(grades), Func) ;
return median(grades) ;
}
上面的模板在main中独立工作.cpp调用如下;
double ans = Tanalysis(grade_aux,did) ;
double ans2 = Tanalysis(grade_aux, didnt) ;
cout << "And the Answer for did is: " << ans <<
". The Answer for didnt is: " << ans2 << endl ;
为了让它与write_analysis函数一起使用,我还必须对其进行模板化。
template <typename F, typename F2>
void Twrite_analysis(ostream& out, const string& name, F Func, F2 Func2)
{
out << name << " : median(did) = " << Func <<
" : median(didnt) = " << Func2 << endl ;
}
在主.cpp中调用如下;
Twrite_analysis(cout, "median", Tanalysis(grade_aux, did), Tanalysis(grade_aux, didnt));
这是我能想到的最好的解决方案,但如果有人对如何改进它有任何意见,那就太好了。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数