文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>通过map 查找 调用类的成员函数

通过map 查找 调用类的成员函数

时间:2010-12-02  来源:wumao2

在上一篇,我转载了《C++中指向类成员的指针》, 这是本篇的内容是本篇的基础。 本片文章主要是用实例说明怎样通过map来调用类的成员函数。 场景: 比如说我想通过输入不同的 字符串 然后调用不同的函数来处理。 我想这类应用非常多吧。 而却大部分c++程序员的解决方案是 string   stInput;
if (stInput == "aaa")
{
    // call A function, do something. } else if (stInput == "bbb") {     / call B function, do something. }
我们可以看出这样的代码有多丑。今天我们通过map的映射调用函数。 我们可以看一下这样的结构 class  A { public:     ...
public:    typedef int (A::*pFun_t)(int x);    map<string, pFun_t>  m_map2Func; };
这样我们就可以直接通过 key 找到需要调用的成员函数。 是不是很过瘾。 //=====例子, 我这里使用的是 qt 编写的测试程序,需要的可以修改成纯c++的代码====== 我的文件和类命名都是用L开头的, 因为L是我们公司的第一个字母。

// !   head file #ifndef LTEST_H
#define LTEST_H
#include <iostream>
#include <QMap>
using namespace std;
class LTest
{
public:
    LTest();

public:
    int HelloWorld(int v) // v means value
    {
        cout << "IN helloWorld! a= " << v << endl;
        return 1;
    }

public:
    typedef  int (LTest::*pFunc)(int v);
    QMap<int, pFunc >       m_key2FunPtr;
};
#endif // LTEST_H


// ================ cpp  file ==============
#include "ltest.h"
LTest::LTest()
{
    m_Func.insert(5, &LTest::HelloWorld);
}



// ! main.cpp #include <QtCore/QCoreApplication>
#include "ltest.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    LTest test;
     
    // ! 直接通过key 调用函数, 激动吧。 
    (test.*(test.m_Func[5]))(6); // ! 新手如果看不懂这句,可以分两边来,见下面的方法.

    // ! ==== 这三句是写给新手看的,免得一下转不过弯。 和上面一句是同样的意思
    typedef  int (LTest::*fp)(int);
    fp  p = test.m_Func[5];;
   (test.*p)(1000);
    //===============================

    return a.exec();
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载