复习 C++ 中类的函数指针
函数指针这种东西,平时工作中基本上不会用到。
那函数指针会用在哪里?
下面是一些基本的用法,根据消息号调到对应的函数:
#include <iostream>
#include <map> enum MsgCode
{
MSGCODE1 = ,
MSGCODE2 = ,
}; class Fuck
{
public:
Fuck(int i=):f(i){
// register functions
mapFunction[MSGCODE1] = &Fuck::method1;
mapFunction[MSGCODE2] = &Fuck::method2;
// ...
} public:
int method1(int i);
int method2(int i);
// ... public:
bool processMsg(int msg_code, int msg_data); private:
int f; private:
std::map<int, int (Fuck::*)(int i)> mapFunction;
// int (Fuck::*mapFunction[1024])(int i);
// std::map<std::string, int (Fuck::*)(int i)> mapFunction;
}; int Fuck::method1(int i)
{
return i * f;
} int Fuck::method2(int i)
{
return i * f + ;
} bool Fuck::processMsg(int msg_code, int msg_data)
{
std::map<int, int (Fuck::*)(int i)>::iterator it = mapFunction.find(msg_code);
if(it == mapFunction.end())
return ; int result = (this->*it->second)(msg_data);
std::cout << result << std::endl; return ;
} int main(int argc, char** argv)
{
Fuck fuck(); int msg_code = MSGCODE1;
int msg_data = ;
fuck.processMsg(msg_code, msg_data); msg_code = MSGCODE2;
msg_data = ;
fuck.processMsg(msg_code, msg_data); return ;
}
如有其他需求,扩展一下就好。。
复习 C++ 中类的函数指针的更多相关文章
- C#编程语言之委托与事件(一)—— C/C++函数指针和C#委托初步
相信正在学习C#的人都有学习过C或C++的经验,本文要讲的第一个要点是C#中的委托(delegate,有些资料也叫代表).什么是委托,很多人都能自然而然地想到C/C++中的函数指针,事实上很多书和资料 ...
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
1. 引用本身是有指针实现的:引用为只读指针 例子: int d=123; int& e=d; //引用 int * const e=d; //只读指针,e指向d,不可修改e指 ...
- C语言复杂的函数指针声明
复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二. 讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/4827 ...
- C/C++函数指针(typedef简化定义)
学习要点: 1,函数地址的一般定义和typedef简化定义; 2,函数地址的获取; 3,A函数地址作为B函数参数的传递; 函数存放在内存的代码区域内,它 ...
- 成员函数指针与高性能C++委托
1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...
- c/c++函数指针(3)
原文地址:http://blog.csdn.net/qingshuiyangfan/article/details/7692647 学习要点: 1,函数地址的一般定义和typedef简化定义; ...
- [转]成员函数指针与高性能的C++委托
原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...
- 关于C++中的非静态类成员函数指针
昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普 ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
随机推荐
- OneZero第三周——预完成功能点统计
本周OneZero将完成“摇一摇”功能. 功能点统计如下: 1.点击主页面“摇一摇”按钮,进入摇一摇界面. 2.摇一摇界面布局(上,中,下). 3.摇动手机,在摇一摇界面中显示一条消费记录. 4.继续 ...
- mybatis学习 十四 resultMap标签 一对一(联合查询)
1.使用 resultMap 实现关联单个对象(联合查询方式) <resultMap type="Student" id="stuMap1"> &l ...
- PHP实现图片批量压缩
set_time_limit(0); global $source_dir; global $target_dir; $source_dir = "D:/images/";//目标 ...
- php,合并数组,合并一维数组,合并二维数组,合并多维数组
合并数组 例子1: <?php $msg = [ "code" => "0", "msg" => "" ...
- 在64位win10下安装32位oracle
乱试,居然搞定了. 1 下载个32位的驱动包,解压拷贝到C:\Windows\SysWOW64 其实这样就能用了:)不过如果人家只提供一个tsname的文件给你,或某些程序跑配置的,读取的配置是一个t ...
- 模板引擎(smarty)知识点总结四
/* smarty 引入对象 */ require_once 'libs/Smarty.class.php'; require 'MySmarty.class.php'; $msma = ne ...
- Matlab用mpeaks函数求峰值点坐标
clear;clc;close all % 初始化 m = [-6,-2,0,2,4,6]; sigma = [1,1,0.5,0.25,0.6,2]; h = [1,2,3,2,2.13,3.14] ...
- noip2017d2t2
看数据范围想到状压,我们知道最后是选出一颗生成树,但边权的计算有一些有趣: 我们先选一个点做根:然后就发现边的权和深度有关:那我们按深度dp;即按层dp; dp[i][s]表示前i层选的点集为s,转移 ...
- (最大m子段和) Max Sum Plus Plus (Hdu 1024)
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/ ...
- hdu1258
给你两个数t,n 接下来输入n个数字 让你输出所有数字相加等于n的组合 4 6 4 3 2 2 1 1 t n 4 3+1 2+2 2+1+1 Sample Input 4 6 4 3 2 2 1 1 ...