function-pointers 相关问题

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

如何将具有多个参数的函数作为回调/函数指针传递?

我一直在尝试重构一些代码,最终在使用带有参数 foo(unsigned long, int, int[]. ..

回答 1 投票 0

错误:以数组和函数指针作为参数的函数的“未定义引用”

每次调用force函数时,我都会得到一个未定义的引用; collect2:错误:ld 返回 1 退出状态。 以下是 main.cpp 中 main 函数上方的强制函数的声明: 无效...

回答 1 投票 0

函数指针初始化为 NULL,但计算结果为 0xffffffff

我正在尝试在 vscode 中使用 ARMCC Keil 工具链和 CMake。我从工作中的 Keil 项目复制了 asm/compiler/linker 标志,但我不在任何地方使用 .crf 和 .d 文件。 我有一个奇怪的

回答 1 投票 0

函数指针的操作

我正在努力弄清楚函数指针和 lambda 函数的语法,我需要一些帮助。 我想做的是创建一个具有参数函数指针并能够添加的类,

回答 1 投票 0

函数指针始终为零,但在取消引用和调用时起作用

这是我拥有的最小代码示例(我尝试运行最小示例以确保它重现我所看到的问题): 无效测试fn(无效){ printf("你好,世界! ”); } 在...

回答 1 投票 0

C++ 将作为参数的函数指针传递给另一个函数?

我想为图编写广度优先搜索和深度优先搜索函数。但这些函数应该能够将函数作为参数,这样我就可以将图中的每个节点传递给

回答 1 投票 0

C++ 中的函数指针转换

我有一个dlsym()返回的void指针,我想调用void指针指向的函数。 所以我通过强制转换进行类型转换: void *gptr = dlsym(一些符号..); typedef void (*fptr)()...

回答 9 投票 0

C 中的动态数组通过指针传递

为了简单起见:可以看到下面有两个函数声明。 void tableau_initialize(int Rn, int slack_num, int Cn, int A[Rn][Cn], int B[Rn], int C[Cn+1], float ***A_tableau,...

回答 1 投票 0

C++ 从友元类调用成员函数指针

类A类{ 民众: A 类() { if (条件) { cp = &classA::Add; } else { cp = &classA::Mul; } } 私人的: typedef int (classA::*ComputeMethod)(int x, int y...

回答 1 投票 0

如何将不同返回类型的不同方法(成员函数)分配给定义为auto的变量?

我需要将具有不同返回类型的不同方法(成员函数)分配给定义为自动变量的变量。 因此,返回相同数据类型的以下代码可以按预期工作...

回答 1 投票 0

为什么这个函数返回的是指针而不是C语言中的指针值?

#包括 #包括 类型定义结构 { 整数*数组; 整数大小; }大批; 数组 array_create(int init_size); int* array_at(数组*,int索引); 无效数组_...

回答 2 投票 0

我试图从函数中获取用户输入(字符串),然后将主函数中的变量设置为他们的输入。在 C

int main(void){ int *占位符; char userID[10] = ""; 占位符= getIdentity(); 用户 ID = *占位符; } int getIdentity(){ static char userin[] = ""; printf(&quo...

回答 2 投票 0

如何将 C++ 函数传递给采用未指定参数的函数指针的 C 函数?

我的C依赖库(编辑:实际上我们正在编写一个Postgres扩展,所以依赖项是Postgres 14.4)有一个函数 bool expression_tree_walker(Node *node, bool (*walker) (), void *contex...

回答 1 投票 0

常量函数指针优化

我正在尝试使用结构内的函数指针在 C 中实现抽象接口。 像下面这样的东西 typedef int (*fn_t)(int); 类型定义结构 { 整数x; 常量 fn_t fnp; }

回答 1 投票 0

常数函数庞特的含义

我正在阅读其他人的代码,其中包含类似于 boost::function 或 std::function 的自定义函数类。他们通过不断的引用来传递这些函数类。合二为一

回答 1 投票 0

通用成员函数指针作为模板参数

考虑以下代码: #包括 使用命名空间 std; 班级你好{ 民众: 无效 f(){ 计算<<"f"< 考虑这段代码: #include <iostream> using namespace std; class hello{ public: void f(){ cout<<"f"<<endl; } virtual void ff(){ cout<<"ff"<<endl; } }; #define call_mem_fn(object, ptr) ((object).*(ptr)) template<R (C::*ptr_to_mem)(Args...)> void proxycall(C& obj){ cout<<"hello"<<endl; call_mem_fn(obj, ptr_to_mem)(); } int main(){ hello obj; proxycall<&hello::f>(obj); } 当然,这不会在第 16 行编译,因为编译器不知道 R、C 和 Args 是什么。但还有另一个问题:如果试图在 ptr_to_mem 之前定义这些模板参数,他会遇到这种糟糕的情况: template<typename R, typename C, typename... Args, R (C::*ptr_to_mem)(Args...)> // ^variadic template, but not as last parameter! void proxycall(C& obj){ cout<<"hello"<<endl; call_mem_fn(obj, ptr_to_mem)(); } int main(){ hello obj; proxycall<void, hello, &hello::f>(obj); } 令人惊讶的是,g++ 并没有抱怨 Args 不是模板列表中的最后一个参数,但无论如何它无法将 proxycall 绑定到正确的模板函数,只是指出它是一个可能的候选者。 有什么解决办法吗?我的最后一招是将成员函数指针作为参数传递,但如果我可以将它作为模板参数传递,它将更适合我的代码的其余部分。 编辑: 正如一些人指出的那样,这个例子似乎毫无意义,因为 proxycall 不会传递任何参数。在我正在处理的实际代码中,情况并非如此:参数是通过一些模板技巧从 Lua 堆栈中获取的。但这部分代码与问题无关,而且相当冗长,所以我不会将其粘贴到这里。 你可以尝试这样的事情: template <typename T, typename R, typename ...Args> R proxycall(T & obj, R (T::*mf)(Args...), Args &&... args) { return (obj.*mf)(std::forward<Args>(args)...); } 用途:proxycall(obj, &hello::f); 或者,要将 PTMF 变成模板参数,请尝试专业化: template <typename T, T> struct proxy; template <typename T, typename R, typename ...Args, R (T::*mf)(Args...)> struct proxy<R (T::*)(Args...), mf> { static R call(T & obj, Args &&... args) { return (obj.*mf)(std::forward<Args>(args)...); } }; 用途: hello obj; proxy<void(hello::*)(), &hello::f>::call(obj); // or typedef proxy<void(hello::*)(), &hello::f> hello_proxy; hello_proxy::call(obj); 在现代 C++ 中,可以使用 template<auto> 和通用 lambda 包装器: #include <utility> #include <functional> template<auto mf, typename T> auto make_proxy(T && obj) { return [&obj] (auto &&... args) { return (std::forward<T>(obj).*mf)(std::forward<decltype(args)>(args)...); }; } struct R {}; struct A {}; struct B {}; struct Foo { R f(A &&, const B &) { return {}; } //R f(A &&, const B &) const { return {}; } }; int main() { Foo foo; make_proxy<&Foo::f>(foo)(A{}, B{}); //make_proxy<static_cast<R (Foo::*)(A &&, const B &) const>(&Foo::f)>(std::as_const(foo))(A{}, B{}); //make_proxy<static_cast<R (Foo::*)(A &&, const B &)>(&Foo::f)>(foo)(A{}, B{}); } 如果存在重载,应该像注释代码中那样显式指定成员函数类型。

回答 2 投票 0

C++ 回调 ESP32 / Arduino 上的成员函数指针

在C++中这似乎是一件很难的事情。对 C 风格的类中的成员函数的回调,从而使其成为 void(*)() 以便能够在 C 风格的回调函数中使用 this。 在这种情况下,我...

回答 1 投票 0

如何定义有返回值的函数指针?

我想创建一个回调函数。下面的代码不起作用,但它显示了我想要做的事情。这是我在 Rust Playground 中损坏的程序的链接。 fn use_callback(回调:fn(...

回答 1 投票 0

C 风格的 C++ 函子包装器

这是我在最近的问题上尝试的进一步发展。 我想创建一个 bool(double, double) C 风格函数指针,指向具有兼容签名的仿函数。 (原因...

回答 1 投票 0

为什么在回调函数或其他用例中使用函数指针?

嵌入式 C 中函数指针的用例是什么以及为什么在回调函数中使用它?为什么我们不能使用正常的函数调用?不能用正常的函数调用吗? 我无法理解...

回答 1 投票 0

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