我想在派生类中有一些重载函数,但它不起作用。是什么原因?以及如何使其工作?
#include <stdio.h>
struct A {};
struct Compare {
template <typename T> bool operator()(const T& a, const T& b) const {
printf("from operator()\n");
return compare(a, b);
}
private:
template <typename T> bool compare(const T& a, const T& b) const {
printf("from base compare template \n");
return true;
}
// move into derived class, but does not work
// bool compare(const A& n, const A& p) const {
// printf("from base overload\n");
// return true;
// }
};
struct CompareDerived : public Compare {
bool compare(const A& n, const A& p) const {
printf("from derived overload\n");
return true;
}
};
template <typename T, typename Comp = Compare> bool trigger (const T& a, const T&b, const Comp& compare = Comp()) {
return compare(a, b);
}
int main()
{
A a1, a2;
CompareDerived m;
trigger<A, CompareDerived>(a1, a2, m);
return 0;
}
通过https://godbolt.org/z/hTGjjx43o,打印结果:
from operator()
from base compare template