返回值时的函数指针
Function-pointer when returning values
我正在使用C语言来升级我的编码技能。
我设计了一个简单的程序,因为我想很容易地找到我想要的问题,并在处理许多问题时安排工作,如下所示。
这是我的头文件
#pragma once
#ifndef PROBLEM_H
#define PROBLEM_H
namespace PROBLEM_1 { int do_main(); }
typedef int(*MAINFUNC)();
#endif
下面是我的源文件。
#include "problems.h"
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
typedef int(*MAINFUNC)(void);
map<string, MAINFUNC> func_map;
void initialize_problem_map(void) {
func_map["problem_1"] = PROBLEM_1::do_main;
}
namespace PROBLEM_1 {
int do_main(void) {
cout << "hi" << endl;
return 1;
}
}
int main(void) {
string problem;
initialize_problem_map();
cin >> problem;
if (func_map.find(problem) != func_map.end())
return (*(func_map[problem]))();
return -1;
}
如果我输入"PROBLEM_1",那么将执行名称空间PROBLEM_1中的do_main函数。我认为这种设计可以帮助我组织多个编码问题。
然而,我的问题是关于这两行代码,如下所示。
if (func_map.find(problem) != func_map.end())
return (*(func_map[problem]))();
正如您所看到的,main函数的返回类型是"int"。然而,在if子句中,我认为它返回函数指针。因此,我认为这些返回行为与主函数的返回类型不匹配。但是,令我惊讶的是,它运行得很好。
你能解释一下关于退货类型的程序吗?
func_map[problem]
实际上会产生一个函数指针。对其应用运算符()
,将调用该函数,表达式将生成int
。在调用函数指针之前取消引用函数指针是可选的。这是对称的,可选地址采用函数名来初始化函数指针。
确实是
func_map[problem]
是一个指针。但是,您用*:取消引用指针
*(func_map[problem])
并通过添加()调用函数:
(*(func_map[problem]))()
返回"int"。
find返回一个迭代器;如果这个迭代器是end,那么映射中就不存在问题;因为它不是结束,所以它存在,然后在返回行中,使用[]获得的指针函数来调用它。
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址