function-pointers 相关问题

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

如何调用存储在 Box 中的 dyn 函数?

我有这个片段: 使用 std::sync::{Arc,互斥体}; pub 结构任务组 { 任务组:Arc dyn 迭代器>>>, } 实现任务组 { 夫...

回答 1 投票 0

将接受指针类型的函数指针转换为另一个接受引用类型的函数指针是否安全? [重复]

将接受“指针参数”的函数指针转换为另一个接受“引用参数”的函数指针有什么缺点? 考虑以下考试...

回答 1 投票 0

C 中的可变函数指针

我想实现一个函数,它接受一个函数及其参数,然后调用它。 我进行了很多搜索,但无法用可变参数函数来实现它。 我想要一种干净的方式来在 c 之后记录 stdio...

回答 1 投票 0

有没有一种解决方法可以将函数指针类型转换为 C 中的对象指针?

我有一个名为“bench”的函数,它接受一个返回 void 指针的函数指针(对于泛型)。 静态内联无符号长凳(void* (*funcPtr)(va_list), ...) 但如果我通过了...

回答 1 投票 0

指针是一个“未声明的标识符”

代码如下: // 模拟血型遗传 #包括 #包括 #包括 #包括 // 每个人都有两个父母...

回答 2 投票 0

为什么函数指针声明需要知道参数和返回值的类型?

为什么C中的函数声明需要知道所指向函数的参数和返回值的类型? c中的指针声明写法如下: 返回类型 ( *funcPtrName ) (

回答 2 投票 0

C 中的自定义 _printf 函数中无符号十六进制值的输出不正确

我无法从 C 中的自定义 _printf 函数获取正确的输出。该函数应该打印格式化输出,包括无符号的十六进制值。然而,

回答 1 投票 0

如何使用函数指针数组?

我应该如何在C中使用函数指针数组? 我如何初始化它们?

回答 13 投票 0

当放入自己的新函数时,部分函数会停止工作

编辑: 花了好几个小时的时间来处理这个问题让我犯了愚蠢的错误,而且对错误的管理不善。 在 u16 return_address 后面添加 [268] 是正确的答案,但我得到的错误......

回答 1 投票 0

C:当放入自己的新函数时,部分函数将停止工作

第一次来,希望标题没问题。 我有一个 .h 填充: JRAPI u64 list_directory_contents(char *目录); 在 .c 文件中,我有一个以以下开头的函数: u64 列表目录内容 (

回答 1 投票 0

如何在c中包装返回void *的函数

我目前正在c中函数指针的方向上进行一些探索,并且我模拟了一个我认为应该可行的小例子,但它反而产生了分段错误,而我并不真正...

回答 1 投票 0

C 中使用函数指针的正确语法

我已经阅读了函数指针的语法,但无法在我的代码中工作。 该视频解释了语法是: 类型 func0(type0 arg0, ..., typen argn){ // 做一点事 返回一个东西; ...

回答 1 投票 0

C++中调用构造函数和调用构造函数的函数指针有什么区别

问这个问题的目的是为了加深我的理解。 我试图动态加载本机 DLL,并注意到一个我无法理解的现象。 所以鉴于我的 DLL 有以下内容...

回答 1 投票 0

推导函数指针返回类型

我认为代码可以更好地说明我的需求: 模板 结构返回类型 { 类型定义???类型; }; 以便: return_type::类型 -> int 返回类型 我认为代码会更好地说明我的需求: template <typename F> struct return_type { typedef ??? type; }; 这样: return_type<int(*)()>::type -> int return_type<void(*)(int,int)>::type -> void 我知道 decltype 和 result_of 但他们需要通过参数。我想从单个模板参数推断函数指针的返回类型。我无法将返回类型添加为参数,因为这正是我想在此处隐藏的内容... 我知道boost中有一个解决方案,但我无法使用它,并且尝试从boost中挖掘它导致了巨大的失败(就像经常发生的那样)。 欢迎使用 C++11 解决方案(只要 VS2012 支持)。 如果您可以使用可变参数模板(12 年 11 月 CTP),这应该可以工作: template <class F> struct return_type; template <class R, class... A> struct return_type<R (*)(A...)> { typedef R type; }; 实例. 如果您无法使用可变参数模板,则必须为 0、1、2、... 参数提供特定的专业化(手动或预处理器生成)。 编辑 正如评论中所指出的,如果您还想使用可变参数函数,则必须添加一个额外的部分专业化(或者在无可变参数模板情况下为每个参数计数一个): template <class R, class... A> struct return_type<R (*)(A..., ...)> { typedef R type; }; 提问已经有一段时间了。对于 C++17,有一个有趣的选项(使用关键字 auto)。然而,语法与最初要求的有点不同,但结果(类型)是相同的。 首先,我们需要一个辅助函数。正如您在此处看到的,该函数接受一个函数指针并返回一个 R 类型的对象。我们仅在 decltype 语句中需要它,因此该函数永远不会被调用,因此前向声明就足够了。 template<typename R, typename... ARGS> static R return_type(R (*)(ARGS...)); // forward declaration only for decltype 技巧是提供函数指针作为模板自动参数,该参数被转发到 decltype 语句: template<auto FUNCTION_POINTER> using ReturnType = decltype(return_type(FUNCTION_POINTER)); 现在很容易获取返回类型了: #include <iostream> #include <type_traits> template<typename R, typename... ARGS> static R return_type(R (*)(ARGS...)); // forward declaration only for decltype template<typename R, typename... ARGS> static R return_type(R (*)(ARGS..., ...)); // overloaded variant for functions with C-ellipsis template<auto FUNCTION_POINTER> using ReturnType = decltype(return_type(FUNCTION_POINTER)); int func1(char c, int i, long l); // also here only forward declarations needed void func2(unsigned u, float f); double func3(bool b); bool func4(int, ...); int main() { std::cout << std::is_same_v<int, ReturnType<func1>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func2>> << std::endl; std::cout << std::is_same_v<double, ReturnType<func3>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func1>> << std::endl; std::cout << std::is_same_v<void, ReturnType<func4>> << std::endl; std::cout << std::is_same_v<bool, ReturnType<func4>> << std::endl; } 您可以在 Wandbox 中尝试完整的示例: https://wandbox.org/permlink/sKemxB44dgAVDlP6 示例中的更新:C 省略函数的重载助手。我将其用于多个 glibc 库函数。

回答 2 投票 0

我尝试让 make foo 返回指向 fun2 的指针,但它似乎不起作用。这里有什么问题?我想要 y 输出 20

int (*foo(int(*f)(int,int)))(int,int) { printf(“你好”); 返回f+1; } int fun1(int x, int y) { 返回x+y; } int fun2(int x,int y) { printf("嘿"); 返回...

回答 1 投票 0

一个指针所指向的地址的值可以赋值给另一个指针所指向的地址吗?我如何解决 C 中的这个最小-最大问题

我有两个问题。 我的代码: #包括 void arrayFonk(int *dizi, int size, int *minimum, int *maximum){ 整数我; 整数b; 对于(i = 0; i < size; i++){ if(*(d...

回答 1 投票 0

正确转换为指向返回函数的函数的函数指针

我正在逆向源代码,我发现了一个如下所示的函数: 考虑一下: int examplefn(int x) { 返回 x * 4; } int (*rtx())(int) { 返回示例fn; } 好吧,那么我需要...

回答 2 投票 0

使用动态库时有没有更好的方法来定义多个函数定义?

下面的代码清单工作得很好 - 但由于我仍在尝试 C++ 水域,我想知道是否有更好 - 更通用 - 的方法来定义每个函数定义...

回答 1 投票 0

Lambda 无法传递给采用函数指针的模板化函数

我的设置 我已经设置了这些东西, 一个结构体 一个模板化函数指针,该指针将该结构体作为参数,并以 T 作为返回类型 接受函数回调的模板化方法调用程序

回答 1 投票 0

为什么这个函数调用不明确,转换为 bool 需要额外的步骤?

考虑以下代码: 结构体Foo { typedef bool (*fptr_t)(int); 运算符 fptr_t() const { 返回_func; } fptr_t_func; }; 类包装器 { 民众: 包装纸(...

回答 1 投票 0

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