LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Да уж, пришел неведомо кто, суть задачи рассказать не может, на все разумные замечания огрызается и обзывает желающих помочь телепатами…

Ну раз уж вы хотите извращений, то, пожалуйста.

class A {
private:
  static void default_func(A *) { ... };

protected:
  using func_ptr = void (*)(A*); // Или какой вам нужен набор аргументов.

  virtual func_ptr real_func() const noexcept { return &A::default_func; }

public:
  bool check() const noexcept { return &default_func == real_func(); }
  ...
};

class B : public A {
protected:
  static void custom_B_func(A *) { ... };

  func_ptr real_func() const noexcept override { return &B::custom_B_func; }
  ...
};

class C : public A {
... // Нет переопределения real_func.
};

Исходная версия eao197, :

Да уж, пришел неведомо кто, суть задачи рассказать не может, на все разумные замечания огрызается и обзывает желающих помочь телепатами…

Ну раз уж вы хотите извращений, то, пожалуйста.

class A {
private:
  void default_func(A *) { ... };

protected:
  using func_ptr = void (*)(A*); // Или какой вам нужен набор аргументов.

  virtual func_ptr real_func() const noexcept { return &A::default_func; }

public:
  bool check() const noexcept { return &default_func == real_func(); }
  ...
};

class B : public A {
protected:
  static void custom_B_func(A *) { ... };

  func_ptr real_func() const noexcept override { return &B::custom_B_func; }
  ...
};

class C : public A {
... // Нет переопределения real_func.
};