function-pointers 相关问题

函数指针是指向函数的指针,该函数可以存储在变量中。它允许运行时选择运行哪个函数。

glsl 函数指针(或等效函数)

我正在尝试根据变量的值调用许多函数之一。该变量是在运行时设置的,因此 CPU 上的代码将不起作用。使用 if/switch 语句会很慢,因为...

回答 2 投票 0

从指向另一个类成员的类成员中的参数调用函数指针

我在 CLASS_A::Determine() 中有一个错误,我不知道我犯了什么错误: 表观调用的括号前面的表达式必须具有(指向)函数类型 CLASS_A 类 { 私人的:

回答 1 投票 0

从指向另一个类成员的类成员中的参数调用函数指针

我有“表观调用的括号前面的表达式必须具有(指向)函数类型”错误,我不知道我犯了什么错误。 CLASS_A 类 { 私人的: 双重计算...

回答 1 投票 0

`std::bind`中的函数调用

TLDR:当使用类的实例或类的 this 指针调用成员函数时,std::bind 实际上是如何工作的? 笔记: 我知道什么是函数适配器和函数对象 我知道

回答 1 投票 0

gcc 和 clang 发出看似多余的函数调用

typedef 结构 foo { void (*const t)(struct foo *f); } foo; 无效 t(结构 foo *f) { } void (*const myt)(struct foo *f) = t; foo f = {.t = t}; int 主函数(无效) { f.t(&f); 我的(...

回答 1 投票 0

用函数指针替换 if 语句有什么缺点?

我正在寻找优化我的更新循环,并解决了这个代码: // 定义两个lambda函数 自动 iftrue = [](int x, int y) -> int { 返回x; }; 自动 iffalse = [](int x, int y)...

回答 1 投票 0

在C中定义函数指针?

最近我发现了一种在 C 中定义函数指针的令人惊讶的方法: typedef void (func_type)(void); func_type *func_ptr; 这是定义函数指针的正确方法吗? 如果我们定义

回答 2 投票 0

将类似“函数指针”的成员设置为 noexcept lambda

我无法达到标题中的效果,如以下代码片段所示: #包括 #包括 #定义USEFNPTR #定义 USESTDFUN 类虚拟{ 民众: #...

回答 1 投票 0

如何将 Zig 函数指针传递给其他函数?

当我将一个函数传递给另一个函数时出现以下错误? const std = @import("std"); const St = struct { a: usize }; fn returnFunc(print: fn (str: []const u8, st: St) v...

回答 2 投票 0

C++中指向成员函数的指针

我在这行 std::cout 中遇到问题 << &X::a << std::endl; this line print 1 supposed to printed address of &X::a this my code #include #包括 我在这一行遇到问题 std::cout << &X::a << std::endl;这一行 print 1 应该打印 &X::a 的地址 这是我的代码 #include <iostream> #include <string> #include <iomanip> class X { public: int a; void f(int b); }; void X::f(int b) { std::cout << "the value of b is " << b << std::endl; } void add() { std::cout << "Hello this function hello" << std::endl; } int main() { void (*funcPtr)(void) = add; funcPtr(); int X::*ptrnumber = &X::a; void (X::*ptrfunction)(int) = &X::f; X xobj; xobj.*ptrnumber = 10; std::cout << "the vslue of a is " << xobj.*ptrnumber << std::endl; (xobj.*ptrfunction)(20); std::cout << std::hex << &X::a << std::endl; //std::cout << funcPtr << std::endl; } 我用不同的编译器c++编译,但我有相同的输出 我显示了这个“M1Xi”的类型,我不知道这个数据类型 &X::f 和 &X::a 不是 指针。因为 f 和 a 都是 非静态 成员,所以它们是 成员指针,无论命名和语法相似性如何,它们的行为都与 指针 非常不同。 成员指针(无论是函数还是数据成员)并不代表地址。所以尝试打印它的地址是没有意义的。 因此,标准库中的 << 和 std::ostream 也没有重载,这也需要成员指针。 但是,存在以 bool 作为参数的重载,并且可以将成员指针隐式转换为 bool。如果成员指针具有空成员指针值,则结果为 false,否则结果为 true。使用默认设置 true 将打印为 1。 表达式 &X::a 不是可以在普通地址中使用的地址。它是成员的相对地址。它只能与指向成员的指针一起使用。 指向成员的指针可以转换为其他指向成员的指针,并且仅在有约束的情况下。它们不能转换为其他类型的指针或 int。在这种情况下很难打印它们的值。 唯一可能的转换是布尔值,它的目的是查看它是否为空。因为指向成员的指针可以为 nullptr: int X::*px = &X::a; bool bx = px; std::cout << bx <<std::endl; px = nullptr; bool bn = px; std::cout << bn <<std::endl; 如果要打印指向成员的指针的地址,则必须使用对象取消引用它: std::cout << std::hex << &(xobj.*(&X::a)) << std::endl; 正如您可能想象的那样,不可能使用取消引用 nullptr 来成员或使用 nullptr 作为对象地址的技巧,因为取消引用空指针是 UB。顺便说一句,这不是一个真正的问题,因为该标准对对象的布局几乎没有保证,因此这个相对地址本身没什么用处。

回答 2 投票 0

传递既没有虚拟继承也没有模板的非静态成员函数[重复]

如何将对象 Problem1 obj 的非静态成员函数 eval 传递给对象 Solversolver ? #包括 #包括 // 非模板类 结构求解器{ ...

回答 2 投票 0

尝试使用变量类型内的 void 指针调用函数

在我正在编写的固件中,我创建了一种变量类型。类似于下面的内容: 结构 SitemMenu { 无符号整型 ID; 字符*文本; 无效 * 子菜单 } typedef s...

回答 1 投票 0

函数指针类型之间的转换

我有一个程序必须将函数存储为 void (*) (void*)。使用该签名创建函数会导致代码重复(通常第一行是将 void 指针转换为正确的...

回答 2 投票 0

何时有必要或有意义地为函数 f 编写 &f 或为函数指针 fp 编写 *fp(除了:sizeof &f)?

来自 C17 标准草案(6.3.2.1 ¶4;脚注已删除): 函数指示符是具有函数类型的表达式。除非它是 sizeof 运算符的操作数,或者一元 &

回答 0 投票 0

为什么 printf 会改变函数指针的地址?

printf 中的寻址运算符将函数指针的地址从常规地址更改为 0x1000。为什么会发生这种情况,这意味着什么? #包括 主函数() { ...

回答 2 投票 0

调用仿函数或函数指针时出现段错误[关闭]

我有一个可以创建 url 的类,以及一个线程,它向实例询问 url 并使用 curl 运行它们(线程由类的静态成员管理,实例被添加到列表等,省略......

回答 0 投票 0

编译时错误:函数模板“cudaOccupancyMaxPotentialBlockSize”的实例与参数列表不匹配

我正在尝试使用在 cuda_runtime.h 中实例化的 API cudaOccupancyMaxPotentialBlockSize,如下所示: 模板 静态 __inline__ __host__ CUDART_DEVICE cudaError_t

回答 0 投票 0

C++ 函数调用,通过具有指向函数的公共成员指针的对象,不使用取消引用运算符

好吧,我认为标题已经足够描述了(但令人困惑,抱歉)。 我正在阅读这个图书馆:Timer1。 在头文件中有一个指向函数的公共成员指针,如下所示: 类

回答 3 投票 0

使用 std::map::at 时对 std::map 的调用不匹配

我遇到了 std::map 函数的问题。 简而言之,我的代码由一个模板基类组成,在该类中,我有一个如下所示的结构: 模板 类基础 {

回答 0 投票 0

在 Unity 中可序列化的 C# 中找到函数指针的正确语法时出现问题

我正在尝试在数据结构中保存一些参数化函数,以便在运行时使用。我希望能够在编辑器中输入参数。 我排除了 UnityEvent,因为我不想指定

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.