min*_*ner 2 c pointers casting function
在这里查看一些 OSCORE 代码:https : //github.com/Fraunhofer-AISEC/uoscore-uedhoc/blob/main/modules/oscore/src/option.c并且在第 31 和 63 行有一些不寻常的转换和指针函数我可以使用帮助的工作。
bool (*class_to_condition(enum option_class class))(uint16_t code)
{
switch (class) {
case CLASS_I:
return is_class_i; //is_class_x() returns bool
case CLASS_E:
return is_class_e;
default:
break;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后
bool (*condition)(uint16_t) = class_to_condition(class);
Run Code Online (Sandbox Code Playgroud)
然后用作
if (!condition(code)) {
Run Code Online (Sandbox Code Playgroud)
我得到:
我不明白
这是否比明显的非指针替代方案更有效,值得增加复杂性(聪明与可爱)?
该函数class_to_condition将 anenum option_class作为参数并返回一个函数指针。返回的函数指针指向一个函数,该函数有一个uint16_t参数并返回一个bool.
如果我们添加以下 typedef:
typedef bool (*fptr)(uint16_t);
Run Code Online (Sandbox Code Playgroud)
我们可以将函数签名重写为:
fptr class_to_condition(enum option_class class) {
Run Code Online (Sandbox Code Playgroud)
调用如下:
fptr condition = class_to_condition(class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |