首页 > 解决方案 > C++强制派生类实现静态函数

问题描述

我正在尝试为某个 A 类的对象创建 Comparator 类。为此,我想创建基类BaseComparator并从中AComparator派生BComparator。有没有办法强制派生的所有类BaseComparator都实现函数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 {
}

会抛出编译时错误吗?

有一种方法可以使用抽象类来实现这一点,但这并不能让我满意,因为它需要一个类具有纯虚函数(而我的类没有状态,只有静态函数,我不需要它们的实例) .

标签: c++staticcompile-time

解决方案


您可以使用CRTP,并检查通过的派生类:

  1. 它确实是派生类。你可以static_assertstd::is_base_of

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


推荐阅读