函数ptr指定类型转换

时间:2019-02-19 05:18:02

标签: c struct member-function-pointers

尝试以下操作:我不确定-正确的方法。或者,我可能必须编写Wrapper函数,但是最好的方法还是这样。另外,将来其他开发人员希望使用来自另一个库,平台的哈希函数,这取决于性能要求的不同目的。

创建的结构:

typedef struct Hashctx{
    char inStream[BUFSIZ];
    char outHash[MAX_HASH];
    int (*Hashing)(char* DstBuf, size_t DstBufSize, \
           size_t *olen, char* SrcBuf, size_t SrcBufSize);
}Hashctx;
Hashctx App1;

并尝试如下初始化:

init()
{
#ifdef PLATFORM
    App1.Hashing = SHA1sumPlatform;
#elif
    App1.Hashing = SHA1sum;
#endif
}

尽管两个函数采用的参数相同,但是返回类型不同。我陷入错误cannot assigned be entity of type ...no definition for App1

int SHA1sum(...)
uint32_t SHA1sumPlatform(...)

我尝试过类型转换,也无法解决错误

Hashing = (int)SHA1sumPlatform;

谢谢

1 个答案:

答案 0 :(得分:1)

在这一行Hashing = (int)SHA1sumPlatform;中,您尝试使用function pointer强制转换int,这不是强制转换函数指针的正确方法。

如果您确定int是您想要的正确返回类型,请执行以下操作:

typedef int (*HashingFnType)(char* DstBuf, size_t DstBufSize, \
           size_t *olen, char* SrcBuf, size_t SrcBufSize); 

typedef struct Hashctx{
    char inStream[BUFSIZ];
    char outHash[MAX_HASH];
    HashingFnType Hashing ;
}Hashctx;

init()
{
#ifdef PLATFORM
    Hashing = (HashingFnType)SHA1sumPlatform;
#elif
    Hashing = (HashingFnType)SHA1sum;
#endif
}

注意:要转换具有不同类型的函数指针,两种类型应兼容。进一步了解here