标签: function-pointers

在不使用单独的typedef的情况下声明函数指针数组的语法是什么?

可以像这样创建函数指针数组:

typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};
Run Code Online (Sandbox Code Playgroud)

在不使用typedef?的情况下创建函数指针数组的语法是什么?

c++ arrays syntax typedef function-pointers

44
推荐指数
3
解决办法
4万
查看次数

将std :: bind转换为函数指针

我有一个第三方库,它有一个方法,将函数指针作为第一个参数:

int third_party_method(void (*func)(double*, double*, int, int, double*), ...);
Run Code Online (Sandbox Code Playgroud)

我想传递一个指向类声明如下的方法的指针:

class TestClass
{
    public:
        void myFunction (double*, double*, int, int, void*);
Run Code Online (Sandbox Code Playgroud)

我试图传递这个函数如下:

TestClass* tc = new TestClass();
using namespace std::placeholders;
third_party_method(std::bind(&TestClass::myFunction, tc, _1, _2, _3, _4, _5), ...);
Run Code Online (Sandbox Code Playgroud)

但是,这不编译:

Conversion of parameter 1 from 'std::tr1::_Bind<_Result_type,_Ret,_BindN>' to 'void (__cdecl *)(double *,double *,int,int,void *)' is not possible
with
[
    _Result_type=void,
    _Ret=void,
    _BindN=std::tr1::_Bind6<std::tr1::_Callable_pmf<void (__thiscall TestClass::* const )(double *,double *,int,int,void *),TestClass,false>,TestClass *,std::tr1::_Ph<1>,std::tr1::_Ph<2>,std::tr1::_Ph<3>,std::tr1::_Ph<4>,std::tr1::_Ph<5>>
]
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将成员传递给函数吗?

c++ function-pointers

44
推荐指数
3
解决办法
3万
查看次数

Python,如何将参数传递给函数指针参数?

我刚开始学习Python,发现我可以将一个函数作为另一个函数的参数传递.现在如果我调用foo(bar())它将不会作为函数指针传递,而是使用函数的返回值.调用foo(bar)将传递函数,但这样我无法传递任何其他参数.如果我想传递一个调用的函数指针bar(42)怎么办?

我希望能够重复一个函数,无论我传递给它的是什么参数.

def repeat(function, times):
    for calls in range(times):
        function()

def foo(s):
        print s

repeat(foo("test"), 4)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该函数foo("test")应该连续调用4次.有没有办法实现这一点,而不必通过"测试" repeat代替foo

python function-pointers callback

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

40
推荐指数
3
解决办法
2万
查看次数

C++函数指针(类成员)到非静态成员函数

class Foo {
public:
    Foo() { do_something = &Foo::func_x; }

    int (Foo::*do_something)(int);   // function pointer to class member function

    void setFunc(bool e) { do_something = e ? &Foo::func_x : &Foo::func_y; }

private:
    int func_x(int m) { return m *= 5; }
    int func_y(int n) { return n *= 6; }
};

int
main()
{
    Foo f;
    f.setFunc(false);
    return (f.*do_something)(5);  // <- Not ok. Compile error.
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

c++ function-pointers

39
推荐指数
2
解决办法
6万
查看次数

函数指针作为参数

是否可以将函数指针作为参数传递给C中的函数?

如果是这样,我将如何声明和定义一个以函数指针作为参数的函数?

c function-pointers argument-passing

39
推荐指数
3
解决办法
8万
查看次数

用C++编写的函数指针

我有一个由dlsym()返回的void指针,我想调用void指针指向的函数.所以我通过强制转换进行类型转换:

void *gptr = dlsym(some symbol..) ;
typedef void (*fptr)();
fptr my_fptr = static_cast<fptr>(gptr) ;
Run Code Online (Sandbox Code Playgroud)

我也试过reinterpret_cast但没有运气,虽然C演员似乎工作..

c++ casting function-pointers

38
推荐指数
2
解决办法
6万
查看次数

使用函数指针的STL映射

我开发了一个具有许多内置函数的脚本引擎,所以为了调用任何函数,我的代码只是进入一个if .. else if .. else if检查名称的墙,但我想开发一个更有效的解决方案.

我应该使用带字符串的hashmap作为键和指针作为值吗?我怎么能用STL地图呢?

编辑:我想到的另一点:当然使用map会强制编译器不要内联函数,但是我的低效方法没有因函数调用的必要性而产生任何开销,它只是执行代码.

所以我想知道函数调用产生的开销是否会比拥有if..else链更好...否则我可以通过在运行时检查字符来最小化比较次数(将更长但更快).

c++ stl function-pointers map

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

函数指针需要一个&符号

在C/C++中,如果我有以下功能:

void foo();
void bar(void (*funcPtr)());
Run Code Online (Sandbox Code Playgroud)

这两个电话之间有区别吗:

bar(foo);
bar(&foo);
Run Code Online (Sandbox Code Playgroud)

c c++ function-pointers

38
推荐指数
2
解决办法
5071
查看次数

在函数调用中使用多个星号有什么用?

我想不出函数调用中多个星号的任何实际用法:

void foo(int a, char b)
{

}

int main(void)
{
    (**************foo)(45, 'c');

    //or with pointer to function:
    void (*ptr)(int, char) = foo;
    (******ptr)(32, 'a');
}
Run Code Online (Sandbox Code Playgroud)

为什么在C和C++中都允许这个东西?

c c++ function-pointers function-call dereference

36
推荐指数
3
解决办法
2141
查看次数