函数指针是指向函数的指针,该函数可以存储在变量中。它允许运行时选择运行哪个函数。
我有一个dlsym()返回的void指针,我想调用void指针指向的函数。 所以我通过强制转换进行类型转换: void *gptr = dlsym(一些符号..); typedef void (*fptr)()...
为了简单起见:可以看到下面有两个函数声明。 void tableau_initialize(int Rn, int slack_num, int Cn, int A[Rn][Cn], int B[Rn], int C[Cn+1], float ***A_tableau,...
类A类{ 民众: A 类() { if (条件) { cp = &classA::Add; } else { cp = &classA::Mul; } } 私人的: typedef int (classA::*ComputeMethod)(int x, int y...
如何将不同返回类型的不同方法(成员函数)分配给定义为auto的变量?
我需要将具有不同返回类型的不同方法(成员函数)分配给定义为自动变量的变量。 因此,返回相同数据类型的以下代码可以按预期工作...
#包括 #包括 类型定义结构 { 整数*数组; 整数大小; }大批; 数组 array_create(int init_size); int* array_at(数组*,int索引); 无效数组_...
我试图从函数中获取用户输入(字符串),然后将主函数中的变量设置为他们的输入。在 C
int main(void){ int *占位符; char userID[10] = ""; 占位符= getIdentity(); 用户 ID = *占位符; } int getIdentity(){ static char userin[] = ""; printf(&quo...
如何将 C++ 函数传递给采用未指定参数的函数指针的 C 函数?
我的C依赖库(编辑:实际上我们正在编写一个Postgres扩展,所以依赖项是Postgres 14.4)有一个函数 bool expression_tree_walker(Node *node, bool (*walker) (), void *contex...
我正在尝试使用结构内的函数指针在 C 中实现抽象接口。 像下面这样的东西 typedef int (*fn_t)(int); 类型定义结构 { 整数x; 常量 fn_t fnp; }
我正在阅读其他人的代码,其中包含类似于 boost::function 或 std::function 的自定义函数类。他们通过不断的引用来传递这些函数类。合二为一
考虑以下代码: #包括 使用命名空间 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{}); } 如果存在重载,应该像注释代码中那样显式指定成员函数类型。
C++ 回调 ESP32 / Arduino 上的成员函数指针
在C++中这似乎是一件很难的事情。对 C 风格的类中的成员函数的回调,从而使其成为 void(*)() 以便能够在 C 风格的回调函数中使用 this。 在这种情况下,我...
我想创建一个回调函数。下面的代码不起作用,但它显示了我想要做的事情。这是我在 Rust Playground 中损坏的程序的链接。 fn use_callback(回调:fn(...
这是我在最近的问题上尝试的进一步发展。 我想创建一个 bool(double, double) C 风格函数指针,指向具有兼容签名的仿函数。 (原因...
嵌入式 C 中函数指针的用例是什么以及为什么在回调函数中使用它?为什么我们不能使用正常的函数调用?不能用正常的函数调用吗? 我无法理解...
我有这个片段: 使用 std::sync::{Arc,互斥体}; pub 结构任务组 { 任务组:Arc dyn 迭代器>>>, } 实现任务组 { 夫...
将接受指针类型的函数指针转换为另一个接受引用类型的函数指针是否安全? [重复]
将接受“指针参数”的函数指针转换为另一个接受“引用参数”的函数指针有什么缺点? 考虑以下考试...
我想实现一个函数,它接受一个函数及其参数,然后调用它。 我进行了很多搜索,但无法用可变参数函数来实现它。 我想要一种干净的方式来在 c 之后记录 stdio...
有没有一种解决方法可以将函数指针类型转换为 C 中的对象指针?
我有一个名为“bench”的函数,它接受一个返回 void 指针的函数指针(对于泛型)。 静态内联无符号长凳(void* (*funcPtr)(va_list), ...) 但如果我通过了...
代码如下: // 模拟血型遗传 #包括 #包括 #包括 #包括 // 每个人都有两个父母...
为什么C中的函数声明需要知道所指向函数的参数和返回值的类型? c中的指针声明写法如下: 返回类型 ( *funcPtrName ) (