- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想使用第三方函数,它通过充满函数指针的结构提供其 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/
C++17 在 p0189r1 中引入了新属性 [[nodiscard]] .当一个函数被这个属性修饰时,返回类型不能被丢弃。如果它被丢弃,则会发出警告。 例子: [[nodiscard]] void
C++17 有一个新属性,[[nodiscard]]。 假设我有一个 Result 结构,它有这个属性: struct [[nodiscard]] Result { }; 现在,如果我调用返回 Res
我想使用第三方函数,它通过充满函数指针的结构提供其 API。例如: struct S { using p_func1 = int(*)(int, int); p_func1 func1
我有一个函数对象,它是另一个函数的包装器: template class Wrapper { private: FuncT funcToWrap; public:
从 C++20 开始,[[nodiscard]]可以应用于构造函数。 http://wg21.link/p1771有例子: struct [[nodiscard]] my_scopeguard { /
在哪些用例中使用 [[nodiscard]] 有益类型? 关于类型,[[nodiscard]]如果任何返回该类型实例的函数的返回值被省略,则发出警告; (引自 p0068r0): If [[nodis
我正在尝试测试一些 C++17。我正在尝试: [[nodiscard]] int get_value1() { return 42; } inline void start() { /
C++17 标准中引入的 [[nodiscard]] 属性,如果是 ... potentially-evaluated discarded-value expression,..., implemen
应用于函数时,[[nodiscard]]属性鼓励编译器在被丢弃的表达式中使用而不是强制转换为 void 时发出警告。示例: [[nodiscard]] int callable_return_not_
说我有 [[nodiscard]] int foo () { return 0; } int main () { foo (); } 然后 error: ignoring return
在 C++ 中,我们可以使用“[[nodiscard]]”来装饰我们的返回类型,如果结果未使用,则会触发编译器警告。 这对于强制执行错误代码特别有用 auto dont_forget_to_check
由于 this问题和答案,属性是否被继承并不是 100% 清楚,但可能不是,因为它没有在标准中说明。这就是为什么如果我们只有标记为 nodiscard 的声明在基类中,并使用 Clang 编译,如果我
我想防止人们在不处理返回值的情况下调用 lambda。 Clang 4.0 拒绝我尝试过的一切,使用 -std=c++1z 进行编译: auto x = [&] [[nodiscard]] () {
我有一个 C++ 项目,其中 clang-tidy建议添加[[nodiscard]]到处。这是一个好习惯吗?我的理解是[[nodiscard]]仅当忽略返回值对程序可能是致命的时才应使用。我有一个对象
我想知道是否有办法拥有这样的东西: using CallbackType = std::function; (我知道上面的代码不会被编译并提示 nodiscard 不能应用于类型!) 我的目标是强制回
您可以使用 [[nodiscard]] 属性声明一个类。当您从此类的语义中知道无论何时从函数返回它都必须用于某些事情时,它可能很有用。我有这种情况,用 [[nodiscard]] 标记类而不是返回它的
C++17 已添加 [[nodiscard]] . C++20 添加了 [[nodiscard]] 的使用在 empty方法,例如 vector::empty() -- 可能是为了避免用户混淆 cle
我有一个标有 C++17 的 [[nodiscard]] 的结构属性。它是这样定义的: struct [[nodiscard]] MyObject final { explicit MyObj
我需要非 C++17 代码库中 [[nodiscard]] 属性的语义。我想在 C++17 之前有依赖于编译器的方法可以实现这一点。有谁知道这些?我对 clang、gcc 和 MSVC 感兴趣。 最佳
最近发布了 Visual Studio 2019 的 16.9.5 版本。它显然引入了新的警告: [[nodiscard]] __declspec(dllexport) bool foo(); //o
我是一名优秀的程序员,十分优秀!