Questions tagged «function-pointers»

函数指针是指向函数的指针,可以将其存储在变量中。它允许在运行时选择要运行的功能。

10
通过函数指针调用C ++类方法
如何获取类成员函数的函数指针,然后再使用特定对象调用该成员函数?我想写: class Dog : Animal { Dog (); void bark (); } … Dog* pDog = new Dog (); BarkFunction pBark = &Dog::bark; (*pBark) (pDog); … 另外,如果可能的话,我也想通过指针来调用构造函数: NewAnimalFunction pNew = &Dog::Dog; Animal* pAnimal = (*pNew)(); 这可能吗?如果可以,这样做的首选方式是什么?

8
捕获为函数指针的C ++ lambda
我在玩C ++ lambda及其隐式转换为函数指针。我的开始示例是将它们用作ftw函数的回调。这按预期工作。 #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { cout << fpath << endl; return 0; }; int ret = ftw("/etc", callback, 1); return ret; } 修改它以使用捕获后: int main() { vector<string> …

7
指向成员函数的函数指针
我想将一个函数指针设置为一个类的成员,该类是指向同一类中另一个函数的指针。我这样做的原因很复杂。 在此示例中,我希望输出为“ 1” class A { public: int f(); int (*x)(); } int A::f() { return 1; } int main() { A a; a.x = a.f; printf("%d\n",a.x()) } 但这无法编译。为什么?

4
int(*)(int *)= 5(或任何整数值)的含义
我无法弄清楚: int main() { int (*) (int *) = 5; return 0; } 上面的分配使用g ++ c ++ 11进行编译。我知道这int (*) (int *)是一个指向接受(int *)as参数并返回int的函数的指针,但我不明白您如何将其等同于5。起初,我认为这是一个不断返回5的函数(根据我最近的学习F#,可能是哈哈),然后,我简要地想到了,该函数指针指向内存位置5,但这显然不起作用,十六进制值也不起作用。 认为可能是因为该函数返回一个int,并且分配一个int是可以的(以某种方式),所以我也尝试这样做: int * (*) (int *) = my_ptr wheremy_ptr是type int *,与第二个函数指针的类型相同,第一种情况是int类型。这不会编译。分配5或任何int值而不是my_ptr都不会为此函数指针编译。 那任务是什么意思呢? 更新1 我们已确认这是一个错误,如最佳答案所示。但是,仍然不知道分配给函数指针的值实际发生了什么,或者分配发生了什么。任何(良好)的解释将不胜感激!请参考下面的编辑以更清楚地了解该问题。 编辑1 我正在使用gcc版本4.8.2(在Ubuntu 4.8.2中) 编辑2 实际上,将其等同于对我的编译器有效的任何东西。甚至将其等同于std :: string变量,或者返回双精度值的函数名称,都可以使用。 编辑2.1 有趣的是,使其成为指向返回非指针数据类型的任何函数的函数指针,将使其进行编译,例如 std::string (*) () = 5.6; …

7
将函数指针转换为其他类型
假设我有一个函数,该函数接受void (*)(void*)用作回调的函数指针: void do_stuff(void (*callback_fp)(void*), void* callback_arg); 现在,如果我有这样的功能: void my_callback_function(struct my_struct* arg); 我可以安全地这样做吗? do_stuff((void (*)(void*)) &my_callback_function, NULL); 我已经看过这个问题,也看过一些C标准,这些标准说您可以转换为“兼容的函数指针”,但是我找不到“兼容的函数指针”含义的定义。

12
如何传递类成员函数作为回调?
我使用的API要求我将函数指针作为回调传递。我正在尝试从我的课程中使用此API,但遇到编译错误。 这是我从构造函数执行的操作: m_cRedundencyManager->Init(this->RedundencyManagerCallBack); 无法编译-我收到以下错误: 错误8错误C3867:'CLoggersInfra :: RedundencyManagerCallBack':函数调用缺少参数列表;使用'&CLoggersInfra :: RedundencyManagerCallBack'创建指向成员的指针 我尝试过使用建议&CLoggersInfra::RedundencyManagerCallBack-对我不起作用。 任何建议/解释吗? 我正在使用VS2008。 谢谢!!

8
Python函数指针
我将函数名称存储在这样的变量中: myvar = 'mypackage.mymodule.myfunction' 现在我要这样调用myfunction myvar(parameter1, parameter2) 最简单的方法是什么?

5
函数指针的解除引用如何发生?
为什么以及如何取消引用函数指针只是“什么都不做”? 这就是我在说的: #include<stdio.h> void hello() { printf("hello"); } int main(void) { (*****hello)(); } 从这里的评论: 函数指针取消引用就可以了,但是生成的函数指示符将立即转换回函数指针 从这里的答案: 取消引用(按照您的想法)函数的指针意味着:访问CODE内存,因为它就像是DATA内存。 不能以这种方式取消对函数指针的引用。相反,它被称为。 我将使用“取消引用”和“调用”的名称。没关系。 无论如何:C的设计方式使得函数名称标识符以及变量保存函数的指针都具有相同的指向CODE存储器的地址。并且它允许通过在标识符或变量上使用call()语法跳转到该内存。 函数指针的取消引用到底如何工作?

8
复杂的C声明
我只是在浏览Internet上的一些代码后发现: float * (*(*foo())[SIZE][SIZE])() 我如何阅读此声明?是否有一组特定的规则来读取这种复杂的声明?



2
lambda宏如何创建lambda?
我在GitHub上找到了这段代码,但不太了解: #define lambda(ret_type, _body) ({ ret_type _ _body _; }) 然后: int (*max)(int, int) = lambda(int, (int x, int y) { return x > y ? x : y; }); int max_value = max(1, 2); // max_value is 2 内的下划线是什么#define?它如何返回函数指针?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.