【发布时间】:2019-06-21 06:05:51
【问题描述】:
我想使用第三方函数,它通过一个充满函数指针的结构体提供它的API。例如:
struct S {
using p_func1 = int(*)(int, int);
p_func1 func1;
using p_func2 = int(*)(char*);
p_func2 func2;
}
第三方库初始化这个结构。
需要检查这些函数(func1、func2)的返回值,我希望我能以某种方式体现在 [[discard]] 属性上,以确保检查返回值。
有没有办法做到这一点,同时保持结构的 ABI?
编辑: 到目前为止,我能想到的最好的办法就是拥有另一个结构,如下所示:
struct S_wrap {
S orig;
[[nodiscard]] int func1(int a, int b){ return orig.func1(a, b); }
[[nodiscard]] int func2(char* a){ return orig.func2(a); }
}
我希望有更好的东西
【问题讨论】:
-
我并不是说这是骗人的,但here 接受的答案可以解决问题。
-
@paler123 这个答案确实很有见地。我仍在寻找最适合我的情况的答案