在这里查看一些 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)
我得到:
我不明白
这是否比明显的非指针替代方案更有效,值得增加复杂性(聪明与可爱)?