函数ptr指定类型转换

问题描述 投票:1回答:1

我正在努力做到:我不确定 - 这是正确的方式。或者,我可能必须编写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;

谢谢

c struct member-function-pointers
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.