【发布时间】:2021-10-30 20:33:56
【问题描述】:
我有这段代码,但我不明白为什么不起作用。
在编译期间,在我调用 run() 的行中,我得到:
Candidate template ignored: could not match 'function<double (const type-parameter-0-0 &, const type-parameter-0-0 &)>' against 'double (*)(const data_t &, const data_t &)'
这是代码:
struct data_t {
double value1;
double value2;
};
double scoreValue1(const data_t & a, const data_t & b) { return a.value1 - b.value1; }
double scoreValue2(const data_t & a, const data_t & b) { return a.value2 * b.value2; }
template <class T>
void run(const std::vector<T> & dataA, const std::vector<T> & dataB, std::function<double(const T &, const T &)> function) {
double value = 0;
for(size_t i=0; i<dataA.size(); ++i)
value += function(dataA[i], dataB[i]);
std::cout << value << std::endl;
}
int main(int argc, const char * argv[]) {
std::vector<data_t> dataA;
std::vector<data_t> dataB;
run(dataA, dataB, scoreValue1);
run(dataA, dataB, scoreValue2);
return 0;
}
【问题讨论】:
标签: c++ templates std-function template-argument-deduction