函数指向类或独立函数的函数

时间:2016-11-18 19:51:47

标签: c++ pointers dependency-injection function-pointers

我有2个具有相同输入和输出类型的函数。

uint32_t doWork(uint32_t time);
uint32_t MyClass::DoWork(uint32_t time);

现在我想依赖将这个函数注入另一个类来使用其中一个函数。

所以我认为我可以使用一个函数点,但这不起作用,因为函数指针也需要使用类类型。

有没有办法将两个函数存储在同一个函数指针类型中并将其传递给构造函数?

该类的功能不是静态的。

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我用我的C ++编译器进行了一些实验。 这就是我得到的似乎正在做的工作:

#include <stdio.h>

typedef unsigned int uint32_t;

typedef uint32_t (doWorkPtr) (uint32_t time);

uint32_t doWork(uint32_t time) {
  return time*2;
}

class MyClass {
  public:
  int times;
  int DoWork(uint32_t time) { return time*times; }
};

struct Adapter {
  MyClass* a;
  doWorkPtr* ptr;
  int operator() (uint32_t time) {
    if(a)
      return a->DoWork(time);
    else
      return ptr(time);
  }
};

int main(int argc, char** argv) {
  Adapter* pointers[2];

  MyClass klass;
  klass.times = 3;
  Adapter adapter;
  adapter.a = &klass;
  adapter.ptr = 0;

  Adapter adapter2;
  adapter2.a = 0;
  adapter2.ptr = &doWork;

  pointers[0] = &adapter;
  pointers[1] = &adapter2;

  printf("result1 %i\n", (*pointers[0])(1));
  printf("result2 %i\n", (*pointers[1])(1));

  return 0;
}

您的课程将存储&#39;适配器&#39;使用它时指针而不是普通函数指针。

希望它有所帮助!