从静态函数调用函数指针[关闭]
Posted
技术标签:
【中文标题】从静态函数调用函数指针[关闭]【英文标题】:Calling function pointer from static function [closed] 【发布时间】:2016-08-04 09:59:48 【问题描述】:在一些名为Light
的类中,我有一个静态函数。
我想从中“解雇”一个代表,
Inside Light.h
static float intepreterDelegate(char *arg)
// here I need to call the function pointer inside Light itself
Light b;
return b.fpAction(arg); // ** error: "expected unqualified id"
;
float (*fpAction)(char*) = 0 ; // the actual pointer
我将如何为此创建正确的语法?
b.(*fpAction)("arg");
编辑:
(b.*b.fpAction)(arg);
错误:* 的右手运算符没有。
【问题讨论】:
我不知道MVCE错误是什么,不是全世界都是c++程序员。你有具体的答案吗? 你需要一个成员函数指针,并且你必须在interpretDelegate
函数内部使用它之前声明它。
@Curnelious 他在问,你向我们提供minimal reproducible example。
可能重复或相关:How to invoke pointer to member function when it's a class data member?
How to invoke pointer to member function from static member function?的可能重复
【参考方案1】:
float (*fpAction)(char*) = 0 ; // the actual pointer
this 创建一个常规函数指针,而不是成员函数指针。 改为
float (Light::*fpAction)(char*) = 0 ;
在名为b
的Light
实例上调用此函数指针
float result = (b.*b.fpAction)("arg");
附: 如果你想知道双 b 在那里做什么。 真的是 (b.*(b.fpAction))("arg"); b.fpAction 将指针标识为 Light 实例 b 的成员。 (b.*pointer)("arg") 在函数内部使用 'b' 作为 'this' 值调用函数指针。
【讨论】:
谢谢!这行得通,但现在像这样设置委托: void Light::setDelegate(float(fp)(char)) fpAction=fp; 给出错误,我想我做错了。 您需要更改委托调用以也使用正确的原型作为成员函数指针:float (Light::*fpAction)(char*) 谢谢,你真的帮了我。你能告诉我如何设置我的代表吗? (我对 C++ 很陌生),这是委托函数 void Light::setDelegate(float(fp)(char)) set here 【参考方案2】:你的类型有误:
float (*fpAction)(char*) = 0 ; // the actual pointer
应该是
float (Light::*fpAction)(char*) = 0 ; // the actual pointer
然后
fpAction = &Light::myMethod;
和
static float intepreterDelegate(char *arg)
Light b;
return (b.*fpAction)(arg);
Demo
【讨论】:
非常感谢,但是:return (b.*fpAction)(arg);给出错误:“无效使用派系”,即使我更改为您在此处显示的内容。以上是关于从静态函数调用函数指针[关闭]的主要内容,如果未能解决你的问题,请参考以下文章