首页 > 解决方案 > C ++分配映射不同的类

问题描述

目前我遇到以下问题:
我想为一个类的对象分配一个映射结构

我的目标是:如果我用括号内的 id 调用地图,则该函数必须启动!

我知道以下方法行不通。但我会非常好,有人可以给我一个想法或提示我如何实现这种方法......

这是一个例子:

#include <map>
#include <functional>
#include <iostream>

class start {
    public:
        void sayhello() {
            std::cout << "Hallo!!" << std::endl;
        }
};

class end {
    public:
        void saybye() {
            std::cout << "Bye!" << std::endl;
        }
}


typedef void (*method)(void);


int main() {

    std::map<int, std::map<int, std::map<int, method>>> myMap;
    myMap[1][5][10] = start::sayhello;
    myMap[2][1][20] = end::saybye;

    // // usage:
    myMap[1][5][10]();
    myMap[2][1][20]();
}

非常感谢您的支持!<3

标签: c++ooptypedefstdmap

解决方案


当前形式的代码将不起作用。

有两种可用的方法:

  1. 将其简单地声明为函数,而不是类中的成员函数。
  2. 将成员函数声明为静态函数。

第二种方法的代码如下:

#include <map>
#include <functional>
#include <iostream>
using namespace std;

class start {
    public:
        static void sayhello() {
            std::cout << "Hallo!!" << std::endl;
        }
};

class end {
    public:
        static void saybye() {
            std::cout << "Bye!" << std::endl;
        }
};


typedef void (*method)(void);


int main() {

    std::map<int, std::map<int, std::map<int, method>>> myMap;
    myMap[1][5][10] = start::sayhello;
    myMap[2][1][20] = end::saybye;

    // // usage:
    myMap[1][5][10]();
    myMap[2][1][20]();
    return 0;
}

推荐阅读