从 class 或独立函数指向函数的函数指针
function pointer to function from a class or standalone function
我有 2 个具有相同输入和输出类型的函数。
uint32_t doWork(uint32_t time);
uint32_t MyClass::DoWork(uint32_t time);
现在我想将此函数依赖注入到另一个 class 以使用其中一个函数。
所以我想我可以使用功能点,但这不起作用,因为功能指针也需要使用 class 类型。
有什么方法可以将两个函数存储在相同的函数指针类型中并将其传递给构造函数吗?
class 中的函数不是静态的。
感谢任何帮助!
我用我的 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;
}
你的 class 在使用这个时会存储 'Adapter' 指针而不是普通函数指针。
希望对您有所帮助!
我有 2 个具有相同输入和输出类型的函数。
uint32_t doWork(uint32_t time);
uint32_t MyClass::DoWork(uint32_t time);
现在我想将此函数依赖注入到另一个 class 以使用其中一个函数。
所以我想我可以使用功能点,但这不起作用,因为功能指针也需要使用 class 类型。
有什么方法可以将两个函数存储在相同的函数指针类型中并将其传递给构造函数吗?
class 中的函数不是静态的。
感谢任何帮助!
我用我的 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;
}
你的 class 在使用这个时会存储 'Adapter' 指针而不是普通函数指针。
希望对您有所帮助!