gpt4 book ai didi

c++ - [[nodiscard]] 到一个函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:44 24 4
gpt4 key购买 nike

我想使用第三方函数,它通过充满函数指针的结构提供其 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); }
}

我希望有更好的东西

最佳答案

您的包装器(或任何包装器)是唯一的出路。该属性适用于函数 declarator-id(它的名称),而不是函数的类型。所以它在使用指针时丢失了,也不能应用于指针本身:

[dcl.attr.nodiscard]

1 The attribute-token nodiscard may be applied to the declarator-id in a function declaration or to the declaration of a class or enumeration. It shall appear at most once in each attribute-list and no attribute-argument-clause shall be present.

因此,如果函数指针返回 int,防止丢弃结果的唯一方法是使用某种带有命名函数(或 operator()) 应用了属性。

关于c++ - [[nodiscard]] 到一个函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54398577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com