gpt4 book ai didi

c++ - 具有相同概念的类(class)过多

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:15 28 4
gpt4 key购买 nike

我有 5 个类用作运算符:

TurnOn , TurnOff , PushBox , Exit , Enter

对于每种类型,我都有一个包含该类型描述的字符串。

例如:

class Places {

enum Type { Room1 ,Room2 ,Room3 ,Room4 };


// more stuff

};
TurnOn turnOn(Places::Room1);
string turnOnString = "TurnOn(Room1)" ;

我想将信息存储在一张 map 中,所以我为每个运算符(operator)准备了 5 张 map :

map <string , TurnOn > opeatorTurnOn;
map <string , TurnOff > opeatorTurnOff ;
map <string , PushBox > opeatorTPushBox ;
map <string , Exit > opeatorExit ;
map <string , Enter > opeatorEnter ;

但现在我有 5 个映射具有相同的概念:一个字符串及其运算符。

如何将运算符存储在一张 map 中,这样我就不必持有 5 张具有相同概念的 map ?

最佳答案

这取决于您的运算符类是如何实现的(我们的信息很少),但我会制作一个可调用对象的映射,类似于此:

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

struct op1
{
void operator()(int i) { std::cout << "op1::operator() " << i << "\n"; }
};

struct op2
{
void operator()(int i) { std::cout << "op2::operator() " << i << "\n"; }
};

int main()
{
std::map<std::string, std::function<void(int)>> ops;
ops["1"] = op1{};
ops["2"] = op2{};
ops["1"](42);
ops["2"](42);
}

如果您不使用 operator() 重载,您也可以始终将操作包装在 lambda 中。

关于c++ - 具有相同概念的类(class)过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883830/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com