可以像这样创建函数指针数组:
typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};
Run Code Online (Sandbox Code Playgroud)
在不使用typedef?的情况下创建函数指针数组的语法是什么?
我有一个第三方库,它有一个方法,将函数指针作为第一个参数:
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)
有什么方法可以将成员传递给函数吗?
我刚开始学习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?
std::function<T1(T2)>比原版有T1 (*)(T2)什么优势?
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中的函数?
如果是这样,我将如何声明和定义一个以函数指针作为参数的函数?
我有一个由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演员似乎工作..
我开发了一个具有许多内置函数的脚本引擎,所以为了调用任何函数,我的代码只是进入一个if .. else if .. else if检查名称的墙,但我想开发一个更有效的解决方案.
我应该使用带字符串的hashmap作为键和指针作为值吗?我怎么能用STL地图呢?
编辑:我想到的另一点:当然使用map会强制编译器不要内联函数,但是我的低效方法没有因函数调用的必要性而产生任何开销,它只是执行代码.
所以我想知道函数调用产生的开销是否会比拥有if..else链更好...否则我可以通过在运行时检查字符来最小化比较次数(将更长但更快).
在C/C++中,如果我有以下功能:
void foo();
void bar(void (*funcPtr)());
Run Code Online (Sandbox Code Playgroud)
这两个电话之间有区别吗:
bar(foo);
bar(&foo);
Run Code Online (Sandbox Code Playgroud)
?
我想不出函数调用中多个星号的任何实际用法:
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++中都允许这个东西?