函数 ptr 分配类型转换

戈皮

我正在尝试执行以下操作:我不确定 - 方法是否正确。或者,我可能必须编写 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;

谢谢

迷幻的

在这一行中,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
}

注意:要转换具有不同类型的函数指针,两种类型都应该兼容。在此处阅读更多相关信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何转换函数类型?

在Golang中转换函数类型

interface {}进行函数类型转换

从函数返回unique_ptr

shared_ptr析构函数,复制和不完整类型

类型转换/回调函数

如何在类构造函数中创建新值并分配给私有unique_ptr?

将标准库函数专门用于用户定义类型的shared_ptr是否合法?

类型转换函数指针

分配的函数返回类型

类型推导失败:将派生模板的shared_ptr转换为基本模板作为函数参数

在函数指针类型之间转换

如何使用std :: shared_ptr <void>和另一种类型的std :: shared_ptr进行函数重载?

如果我忽略了shared_ptr返回类型的函数的返回值怎么办

移动std :: unique_ptr的构造函数/分配:内存重新分配?

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

自由函数中的类型转换

删除函数unique_ptr

类型转换函数的参数

转换unique_ptr的类型安全吗?

unique_ptr析构函数的优势

std :: unique_ptr constexpr构造函数

使用相同的函数但具有不同的重载来转换std :: tr1 :: shared_ptr <T>和std :: shared_ptr <T>

PHP 类函数的类型转换

即使内存不是动态分配的,在析构函数中是否需要`delete ptr;`?

基于unique_ptr参数指针类型的重载函数

shared_ptr 和 unique_ptr 构造函数

如果 char *ptr[10]={"ram","try"} 那么 ptr ,*ptr , *ptr[0] , ptr[0] 之间有什么区别,如果在 printf 函数中使用了所有给定的四种类型

从“B *”到“std::shared_ptr<A>”的函数式转换没有匹配的转换