我正在嘗試編寫一個頭文件,其中包含一個調用main.cpp中的函數並轉發任意數量參數的函數。此代碼的返回類型需要與轉發函數的返回類型相匹配。爲了達到這個目的,我編寫了下面的虛擬程序,但是我無法得到它來編譯。我會一些幫助感激:根據轉發函數的類型推斷的模板返回類型
#include <functional>
#include <iostream>
double f(double x, int params) {
return 1;
}
template <typename func, typename... Args>
double test(std::function<func(double, Args...)> predicate, Args&&... params){
return 2;
}
int main() {
int dummy = 1;
double result = test(&f, dummy);
std::cout<<result<<std::endl;
return 0;
}
編譯器(鐺++ - 3.8)提供了以下錯誤:
test.cpp:15:18: error: no matching function for call to 'test'
double result = test(&f, dummy);
^~~~
test.cpp:9:8: note: candidate template ignored: could not match
'function<type-parameter-0-0 (double, type-parameter-0-1...)>' against
'double (*)(double, int)'
double test(std::function<func(double, Args...)> predicate, Args&&... params){
^
1 error generated.
請編輯您的問題,方法是刪除所有不必要的代碼和註釋,並添加編譯器給出的確切錯誤消息。 – YSC