function-pointers 相关问题

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

不使用this调用成员函数指针

我编写了以下类来查找关键字并执行关联的函数。 #包括 #包括 #包括 类示例; typedef std::ma...

回答 1 投票 0

如何将类成员定义为指向另一个成员函数的指针?

我想将函数指针设置为类的成员,该指针是指向同一类中另一个函数的指针。我这样做的原因很复杂。 在这个例子中,我想...

回答 8 投票 0

获取const方法的地址

我希望能够形成一个只知道类本身和方法名称的成员指针类型。不幸的是,我无法在我的类中拥有 const 和非常量方法变体。

回答 1 投票 0

函数指针和参数

我一直在尝试理解 geeksforgeeks 的帖子,但无法理解代码片段。这是以下帖子: https://www.geeksforgeeks.org/returning-a-function-pointer-from-a-

回答 1 投票 0

std::function 的目的是什么以及如何使用它?

我有必要使用 std::function 但我不知道以下语法意味着什么。 std::function f_name = []() { FNAME(); }; 使用 std::function 的目标是什么?难道是……

回答 3 投票 0

如何比较 Go 中的 2 个函数?

例如,我有要比较的函数列表: http://play.golang.org/p/_rCys6rynf 类型 Action func(foo string) 类型处理程序结构 { 采取行动 行动后 } var 路线图[s...

回答 4 投票 0

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

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