c++ - 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
解决方案
当前形式的代码将不起作用。
有两种可用的方法:
- 将其简单地声明为函数,而不是类中的成员函数。
- 将成员函数声明为静态函数。
第二种方法的代码如下:
#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;
}
推荐阅读
- mysql - 复制数据的更好方法?
- javascript - Vuex 动态模块没有被命名空间
- java - Spring Boot应用程序失败-错误java包不存在
- python - 同一个变量中超过 1 个单词的条件语句
- vba - vba 复制 listobject 表到 listobject 表
- apache-kafka - 修复kafka中的复制分区
- javascript - Xamarin WebView:无法使用 Facebook 和 Google 帐户登录
- c# - 在excel中导出内容的最佳方法是什么
- react-native - Sinch 服务在 react-native
- microservices - 如何在 Consul 中同一服务的实例之间交换数据?