0

我想在派生类中有一些重载函数,但它不起作用。是什么原因?以及如何使其工作?

#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 
4

0 回答 0