函数指针是指向函数的指针,该函数可以存储在变量中。它允许运行时选择运行哪个函数。
我正在尝试根据变量的值调用许多函数之一。该变量是在运行时设置的,因此 CPU 上的代码将不起作用。使用 if/switch 语句会很慢,因为...
我在 CLASS_A::Determine() 中有一个错误,我不知道我犯了什么错误: 表观调用的括号前面的表达式必须具有(指向)函数类型 CLASS_A 类 { 私人的:
我有“表观调用的括号前面的表达式必须具有(指向)函数类型”错误,我不知道我犯了什么错误。 CLASS_A 类 { 私人的: 双重计算...
TLDR:当使用类的实例或类的 this 指针调用成员函数时,std::bind 实际上是如何工作的? 笔记: 我知道什么是函数适配器和函数对象 我知道
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); 我的(...
我正在寻找优化我的更新循环,并解决了这个代码: // 定义两个lambda函数 自动 iftrue = [](int x, int y) -> int { 返回x; }; 自动 iffalse = [](int x, int y)...
最近我发现了一种在 C 中定义函数指针的令人惊讶的方法: typedef void (func_type)(void); func_type *func_ptr; 这是定义函数指针的正确方法吗? 如果我们定义
将类似“函数指针”的成员设置为 noexcept lambda
我无法达到标题中的效果,如以下代码片段所示: #包括 #包括 #定义USEFNPTR #定义 USESTDFUN 类虚拟{ 民众: #...
当我将一个函数传递给另一个函数时出现以下错误? const std = @import("std"); const St = struct { a: usize }; fn returnFunc(print: fn (str: []const u8, st: St) v...
我在这行 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。顺便说一句,这不是一个真正的问题,因为该标准对对象的布局几乎没有保证,因此这个相对地址本身没什么用处。
如何将对象 Problem1 obj 的非静态成员函数 eval 传递给对象 Solversolver ? #包括 #包括 // 非模板类 结构求解器{ ...
在我正在编写的固件中,我创建了一种变量类型。类似于下面的内容: 结构 SitemMenu { 无符号整型 ID; 字符*文本; 无效 * 子菜单 } typedef s...
我有一个程序必须将函数存储为 void (*) (void*)。使用该签名创建函数会导致代码重复(通常第一行是将 void 指针转换为正确的...
何时有必要或有意义地为函数 f 编写 &f 或为函数指针 fp 编写 *fp(除了:sizeof &f)?
来自 C17 标准草案(6.3.2.1 ¶4;脚注已删除): 函数指示符是具有函数类型的表达式。除非它是 sizeof 运算符的操作数,或者一元 &
printf 中的寻址运算符将函数指针的地址从常规地址更改为 0x1000。为什么会发生这种情况,这意味着什么? #包括 主函数() { ...
我有一个可以创建 url 的类,以及一个线程,它向实例询问 url 并使用 curl 运行它们(线程由类的静态成员管理,实例被添加到列表等,省略......
编译时错误:函数模板“cudaOccupancyMaxPotentialBlockSize”的实例与参数列表不匹配
我正在尝试使用在 cuda_runtime.h 中实例化的 API cudaOccupancyMaxPotentialBlockSize,如下所示: 模板 静态 __inline__ __host__ CUDART_DEVICE cudaError_t
C++ 函数调用,通过具有指向函数的公共成员指针的对象,不使用取消引用运算符
好吧,我认为标题已经足够描述了(但令人困惑,抱歉)。 我正在阅读这个图书馆:Timer1。 在头文件中有一个指向函数的公共成员指针,如下所示: 类
使用 std::map::at 时对 std::map 的调用不匹配
我遇到了 std::map 函数的问题。 简而言之,我的代码由一个模板基类组成,在该类中,我有一个如下所示的结构: 模板 类基础 {
在 Unity 中可序列化的 C# 中找到函数指针的正确语法时出现问题
我正在尝试在数据结构中保存一些参数化函数,以便在运行时使用。我希望能够在编辑器中输入参数。 我排除了 UnityEvent,因为我不想指定