C++ 函数指针问题:如何提供从非成员函数到成员函数的指针
在我的一个项目中,我需要做这样的事情C++ 函数指针问题:如何提供从非成员函数到成员函数的指针,c++,function-pointers,C++,Function Pointers,在我的一个项目中,我需要做这样的事情 class Alpha{ public: Alpha(void* p(int, int) = nullptr); void* calculatePointer; void test(); }; Alpha::Alpha(void* p(int, int)) : calculatePointer(p){}; Alpha::test(){ calculatePointer
class Alpha{
public:
Alpha(void* p(int, int) = nullptr);
void* calculatePointer;
void test();
};
Alpha::Alpha(void* p(int, int)) : calculatePointer(p){};
Alpha::test(){
calculatePointer(5, 10);
}
void calculate(int a, int b){
std::cout << "cum: " << a +b << "\n";
}
int main(){
Alpha A = Alpha(&calculate);
A.test();
}
这只是个傀儡,但这就是我要做的。如何正确执行?如果您对函数指针的确切语法感到困惑,最好定义一个类型别名 如果您使用
使用
,则“rhs”是(*)()
括号是必需的,因为编译器将
void*p(int,int)
视为(void*)p(int,int)
计算器指针是一个void*,它不是一个函数,您希望如何将函数指针存储到其中而不进行强制转换?不要因为它是UB而强制转换,所以请更改您的类型ha,这就是我要问的,正确的语法。calculateinter
具有typevoid*
。这不是函数指针。将其类型更改为void(*)(int,int)
,这是指向接受两个int
并返回一个void
的函数的指针。另外,在构造函数中更改参数p
的类型,因为它指定参数是指向返回void*
的函数的指针(而传递的函数返回void
)。@n.1.8e9-where's-my-sharem。在我的项目中,我有一个类,它希望作为驻留在“int main(){…}”正上方的绘图函数访问;在让函数自己工作之前,不要尝试获取指向函数的指针以在类中工作。实际上,如果不这样做,它就不会编译:(*p),但它现在可以编译了。
error: invalid conversion from ‘void* (*)(int, int)’ to ‘void*’ [-fpermissive]
15 | : calculatePointer(p),
| ^
| |
| void* (*)(int, int)
error: cannot initialize a member subobject of type 'void *' with an lvalue of type 'void *(*)(int, int)'
error: expression cannot be used as a function
In constructor 'Alpha::Alpha(void* (*)(int, int))':
error: invalid conversion from 'void (*)(int, int)' to 'void* (*)(int, int)' [-fpermissive]
note: initializing argument 1 of 'Alpha::Alpha(void* (*)(int, int))'
class Alpha{
public:
using FunctionPtr = void (*)(int, int);
Alpha(FunctionPtr p = nullptr) : calculatePointer(p) {}
FunctionPtr calculatePointer;
void test()
{
if (calculatePointer != nullptr)
{
calculatePointer(5, 10);
}
}
};
void calculate(int a, int b){
std::cout << "sum: " << (a + b) << "\n";
}
Alpha(void (*p)(int, int) = nullptr);