标签: function-pointers

Java中的函数指针

这可能是常见和微不足道的事情,但我似乎无法找到具体的答案.在C#中有一个委托的概念,它与C++中的函数指针的思想密切相关.Java中是否有类似的功能?鉴于指针有点缺席,最好的方法是什么?要说清楚,我们在这里谈论头等舱.

java delegates pointers function-pointers

147
推荐指数
8
解决办法
15万
查看次数

在一个类中使用带有成员函数的通用std :: function对象

对于一个类,我想在一个map存储std::function对象中存储一些函数指针到同一个类的成员函数.但是我在这个代码的开头就失败了:

class Foo {
    public:
        void doSomething() {}
        void bindFunction() {
            // ERROR
            std::function<void(void)> f = &Foo::doSomething;
        }
};
Run Code Online (Sandbox Code Playgroud)

我收到error C2064: term does not evaluate to a function taking 0 argumentsxxcallobj一些奇怪的模板实例化的错误结合.目前我正在使用Visual Studio 2010/2011在Windows 8上工作,在使用VS10的Win 7上工作也失败了.错误必须基于我不遵循的一些奇怪的C++规则.

编辑:我使用提升.这是集成在MS编译器中的C++ 11.

c++ function-pointers function tr1 c++11

147
推荐指数
5
解决办法
12万
查看次数

我如何使用函数指针数组?

我应该如何在C中使用函数指针数组?

我该如何初始化它们?

c initialization function-pointers

141
推荐指数
5
解决办法
24万
查看次数

为什么函数指针和数据指针在C/C++中不兼容?

我已经读过将函数指针转换为数据指针,反之亦然,但在大多数平台上都可以工作,但不能保证工作.为什么会这样?两者都不应该只是简单地址到主存储器中,因此兼容吗?

c c++ pointers function-pointers

128
推荐指数
10
解决办法
1万
查看次数

如何通过需要自由函数的成员函数?

问题如下:考虑这段代码:

#include <iostream>


class aClass
{
public:
    void aTest(int a, int b)
    {
        printf("%d + %d = %d", a, b, a + b);
    }
};

void function1(void (*function)(int, int))
{
    function(1, 1);
}

void test(int a,int b)
{
    printf("%d - %d = %d", a , b , a - b);
}

int main (int argc, const char* argv[])
{
    aClass a();

    function1(&test);
    function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我如何使用a's aClass::test …

c++ arguments function-pointers parameter-passing pointer-to-member

106
推荐指数
6
解决办法
23万
查看次数

通过函数指针调用C++类方法

如何获取类成员函数的函数指针,然后使用特定对象调用该成员函数?我想写:

class Dog : Animal
{
    Dog ();
    void bark ();
}

…
Dog* pDog = new Dog ();
BarkFunction pBark = &Dog::bark;
(*pBark) (pDog);
…
Run Code Online (Sandbox Code Playgroud)

另外,如果可能的话,我也想通过指针调用构造函数:

NewAnimalFunction pNew = &Dog::Dog;
Animal* pAnimal = (*pNew)();    
Run Code Online (Sandbox Code Playgroud)

这是可能的,如果是这样,那么首选的方法是什么?

c++ function-pointers class-method

105
推荐指数
8
解决办法
26万
查看次数

int(*)(int*)= 5(或任何整数值)的含义

我无法弄清楚这一点:

int main() {
    int (*) (int *) = 5;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的赋值用g ++ c ++ 11编译.我知道这int (*) (int *)是一个指向函数的指针,它接受一个(int *)as参数并返回一个int,但是我不明白你怎么能把它等同于5.起初我认为它是一个不断返回5的函数(来自我最近的学习) F#,可能,哈哈),然后我简单地想,函数指针指向内存位置5,但这显然不起作用,并且十六进制值也不行.

认为这可能是因为函数返回一个int,并且分配一个int是好的(不知何故),我也试过这个:

int * (*) (int *) = my_ptr
Run Code Online (Sandbox Code Playgroud)

where my_ptr是类型int *,与第二个函数指针的类型相同,如第一种类型为int的情况.这不编译.分配5或任何int值,而不是my_ptr,也不编译此函数指针.

那么作业是什么意思呢?

更新1

我们已经确认这是一个错误,如最佳答案所示.但是,仍然不知道您分配给函数指针的值实际发生了什么,或者赋值的情况.任何(好的)解释都将非常感谢!有关问题的详细说明,请参阅下面的编辑.

编辑1

我使用的是gcc版本4.8.2(在Ubuntu 4.8.2中)

编辑2

实际上,将它等同于我的编译器.甚至将它等同于std :: string变量,或者返回double的函数名,也可以.

编辑2.1

有趣的是,使它成为一个函数指针,指向任何返回不是指针的数据类型的函数,将让它进行编译,例如

std::string (*) () = 5.6;
Run Code Online (Sandbox Code Playgroud)

但是只要函数指针指向返回某个指针的函数,它就不会编译,例如with

some_data_type ** (*) () = any_value;
Run Code Online (Sandbox Code Playgroud)

c++ pointers function-pointers

87
推荐指数
3
解决办法
8909
查看次数

C++ lambda,捕获为函数指针

我正在玩C++ lambdas以及它们对函数指针的隐式转换.我的开始示例是将它们用作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;
}
Run Code Online (Sandbox Code Playgroud)

修改后使用捕获:

int main()
{

    vector<string> entries;

    auto callback = [&](const char *fpath, const struct stat *sb,
        int typeflag) -> int {
        entries.push_back(fpath);
        return 0;
    };

    int ret = ftw("/etc", callback, 1);

    for (auto entry : entries …
Run Code Online (Sandbox Code Playgroud)

c++ lambda function-pointers c++11

83
推荐指数
5
解决办法
5万
查看次数

将函数指针转换为另一种类型

假设我有一个接受void (*)(void*)函数指针的函数用作回调函数:

void do_stuff(void (*callback_fp)(void*), void* callback_arg);
Run Code Online (Sandbox Code Playgroud)

现在,如果我有这样的功能:

void my_callback_function(struct my_struct* arg);
Run Code Online (Sandbox Code Playgroud)

我可以安全地这样做吗?

do_stuff((void (*)(void*)) &my_callback_function, NULL);
Run Code Online (Sandbox Code Playgroud)

我已经看过这个问题并且我已经看过一些C标准,它们说你可以转换为'兼容函数指针',但我找不到'兼容函数指针'的含义.

c function-pointers

81
推荐指数
4
解决办法
8万
查看次数

指向成员函数的函数指针

我想将一个函数指针设置为一个类的成员,该类是指向同一个类中另一个函数的指针.我这样做的原因很复杂.

在这个例子中,我希望输出为"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())
}
Run Code Online (Sandbox Code Playgroud)

但这在编译时失败了.为什么?

c++ oop function-pointers

78
推荐指数
5
解决办法
9万
查看次数