c++ - 从类或独立函数指向函数的函数指针

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

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

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

现在我想将此函数依赖注入(inject)到另一个类中以使用其中一个函数。

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

有什么方法可以将两个函数存储在相同的函数指针类型中并将其传递给构造函数吗?

类中的函数不是静态的。

感谢任何帮助!

最佳答案

我用我的 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;
}

在使用它时,您的类将存储“适配器”指针而不是普通函数指针。

希望对您有所帮助!

关于c++ - 从类或独立函数指向函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684979/

相关文章:

java - 在 Symbian 上开发的最佳方式

c++ - 为 [-1, 1] 中的 c 计算 sqrt((b²*c²)/(1-c²)) 的数值稳定方法

C++指针数组函数按地址传递

c - C套接字编程中不兼容的指针类型转换警告

php - 让 DI 容器替换全局 $registry 对象是一种好习惯吗?

c++ - printf 带有空值的缓冲区

c++ - 在没有分析器的情况下在 C++ 中测试代码速度的最佳方法,或者尝试没有意义?

c++ - 函数的 std::vector

c# - Ninject Constructor 参数检查参数是否存在

c++ - 依赖注入(inject)和事件处理