我試圖用C++實現差異分解公式,因爲它出現了here。用可變參數模板在C++中實現差異化的差異
到目前爲止,我已經來到這個
template<typename F, typename T>
T divdiff(F f, T t1, T t2) {
return (f(t1) - f(t2))/(t1 - t2);
};
template<typename F, typename T, typename... Args>
T divdiff(F f, T tstart, Args... t, T tend) {
return (divdiff(f, tstart, t...) - divdiff(f, t..., tend))/ (tstart - tend);
};
它編譯罰款,但是當它嘗試使用它,例如像這樣
double r = divdiff([](double x) { return 2 * x; }, 1.0, 2.0, 3.0);
我有以下錯誤
note: candidate function not viable: requires 3 arguments, but 4 were provided
T divdiff(F f, T tstart, Args... t, T tend) {``
我的編譯器是gcc
配置爲:--prefix =/Library/Developer/CommandLineTools/usr --with-gxx-include-dir =/usr/include/C++/4.2.1蘋果LLVM版本8.0.0(clang-800.0。 42.1)目標:x86_64的 - 蘋果darwin15.4.0線程模型: POSIX InstalledDir:/庫/開發商/ CommandLineTools在/ usr/bin中
有誰知道爲什麼它不工作,如何解決它
似乎是一個可變參數必須是在爲了月底,使其工作 –
這是正確的,一個可變參數必須是最後一個。你可以將它打包在一個元組中, – Danh