我在這裏看到了一些關於使用模板函數和關於C++ Accelerated(Koeing/Moo)書中的問題的文章,但沒有一篇回答我的問題,所以我希望你能幫助。C++加速(Q 8-1) - 由另一個函數參數化的模板函數
我正在努力的問題是; 「我們編寫的各種分析函數是Sect 6.2/110共享相同的行爲;它們僅在它們調用的用於計算最終成績的函數方面有所不同。編寫一個模板函數,根據等級函數的類型進行參數化,並使用該功能來評估分級方案「。
我還處於學習的初期階段,我真的很感謝這個問題的一些幫助,因爲我一直堅持了幾個星期,沒有任何Google搜索幫助過。我讀過的所有東西都是指引用,或指針 - 這本書尚未涉及,所以我覺得它更令人困惑。
我已經包含了下面的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 ;
}
在main.cpp中調用如下;
write_analysis(cout, "median", median_analysis, did, didnt) ;
我不能說足夠多的我會感謝一些幫助。先謝謝你。
我認爲這個問題只涉及第一種和第三種方法,因爲它們實際上是相同的。 –
要解決這個問題,請思考這兩種方法共享的內容,以及它們不共享的內容。任何常見的功能都可以保留在方法中,並且可以通過模板專門化來處理任何差異。 –
這本書說「寫一個分析函數來調用我們的'optimistic_median'函數」。這個分析函數應該看起來像你的第一個和第三個方法,而不是'optimistic_median'函數本身。 –