我的函数指针有问题。我有这种typedef:
typedef struct patchwork *(*create_patchwork_value_fct)
(const enum nature_primitif);
这是通用的(在另一个文件中实现)。我想用输入调用它。我该怎么办?
答案 0 :(得分:1)
你需要
typedef
ed函数指针的类型的变量。伪代码
如果你有像
这样的功能struct patchwork * funccall(const enum nature_primitif)
{
//do something
}
然后,你可以做到
create_patchwork_value_fct fp= funccall;
struct patchwork * retptr = NULL;
enum nature_primitif enumVal = <some enum value>;
retptr = fp(enumVal);
也许您可以阅读this answer以获得更多见解。
答案 1 :(得分:0)
这实际上不是函数指针 - 这是定义函数指针类型:
typedef struct patchwork *(*create_patchwork_value_fct)
(const enum nature_primitif);
因此,这定义了一个名为create_patchwork_value_fct
的函数指针类型。这是一个函数指针,该函数指向一个带有单个参数的函数(const enum nature_primitif),并返回一个struct patchwork*
- 即指向拼凑结构的指针。
让我们看看如何使用它:
void someFunc(create_patchwork_value_fct funcToCall, enum param)
{
funcToCall(param);
}
struct patchwork* CreateAPatchworkValue(enum nature_primitif enumVal)
{
struct patchwork* pwork = malloc(sizeof(struct patchwork));
pwork->someVal = enumVal;
return pwork;
}
void main()
{
someFunc(CreateAPatchworkValue, <a valid nature_primitif enumeration value>)
}
在此示例中,main()
调用someFunc()
,向其传递一个指向CreateAPatchworkValue的指针作为funcToCall
参数,以及一个来自nature_primitif枚举的值。
someFunc然后调用funcToCall,这实际上是对CreateAPatchworkValue的调用。