Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Refer to derivative function

I have a base class and a few derivative. I have to 'register' some static function from each of them. Here is the example:

class Base
{
   // Some interface...
};

class Der1 : Base
{
   static void Do();
};
class Der2 : Base
{
   static void Do();
};

void processStatic()
{
   SomeFunc(Der1::Do);
   SomeFunc(Der2::Do);
}

As you see, SomeFunc receives function pointer. I want to do that automatically with each new derivative class, is it possible? Maybe, predefine static function in Base class and register it there. But I think it's impossible, yes?


Maybe, this will be more easier to understand what do I want:

class Der1 : Base
{
   Der1() { SomeFunc(Der1::Do); }
   static void Do();
};
class Der2 : Base
{
   Der2() { SomeFunc(Der2::Do); }
   static void Do();
};
like image 916
Max Frai Avatar asked Apr 22 '26 17:04

Max Frai


1 Answers

EDIT: Completely replacing previous answer due to clarified requirements.

You could use the CRTP to declare a specialized base class that does nothing more than call your registration function:

#include <iostream>
void SomeFunc(void(*fp)()) {
  (*fp)();
};

template <class D>
struct ExtraBass {
  ExtraBass() {
    static bool once;
    if(!once)
      SomeFunc(D::Do);
    once = true;
  }
};

struct Bass {
};

struct Drive : Bass, ExtraBass<Drive>  {
  static  void Do() { std::cout << "Drive::Do\n"; }
};

struct Deride : Bass , ExtraBass<Deride> {
  static  void Do() { std::cout << "Deride::Do\n"; }
};

int main() {
  Drive d1;
  Deride d2;
  Deride d3;
}
like image 74
Robᵩ Avatar answered Apr 24 '26 07:04

Robᵩ



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!