C++ force derived 类实现静态函数

C++ force derived classes to implement static function

我正在尝试为某些 class A 的对象创建比较器 class。为此,我想创建基础 class BaseComparator 并派生 AComparatorBComparator 从它。有没有办法强制从 BaseComparator 派生的所有 classes 实现函数 bool compare(const A &a, const A &b) 所以

class AComparator : public BaseComparator {
    static bool compare(const A &a, const A &b) { return true; }
}

将编译并

class BComparator : public BaseComparator {
}

会抛出编译时错误吗?

有一种方法可以通过抽象 class 实现这一点,但我并不满意,因为它需要一个 class 来拥有一个纯虚函数(而我的 classes没有状态,只有静态函数,我不需要它们的实例)。

您可以使用 CRTP,并检查传递的派生 class 即:

  1. 真是派生出来的class。您可以在 std::is_base_of

  2. static_assert
  3. 它有这个成员函数作为静态函数。您可以尝试访问限定名称并将其 static_cast 为函数指针类型。