我有 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/