这是问题,我有一个char符号:
char a = '+'; //- * % whatever arithmetic symbol
Run Code Online (Sandbox Code Playgroud)
我想要这样我就可以将 的值a用作操作。我不想使用 aswitch来检查是否a是'+'等,然后为每个case. 我只需要根据以下值更改操作a:
int b = 2a2; //b=4 if a = "+", b = 0 if a = "-" etc
Run Code Online (Sandbox Code Playgroud)
但我不知道如何快速将其char转换为操作。C++ 必须stoi()将字符串转换为整数,但如何将 achar转换为操作?
顺便说一下,哪种类型的数据是+?在像这样的表达式中2+2,2是一个整数,但什么是+?是方法还是什么?
我想要这样我就可以将 的值
a用作操作。
对不起,但这根本不可能。好吧,无论如何,不是您编写它的方式(可能有一些低级方法可以在运行时使用自修改代码来实现类似的东西,但这是一种我不会涉及的高级技术)。
我不想使用 a
switch来检查是否a是'+'等
那将是最简单的解决方案。嗯,我的意思是,它并不需要一个switch专门的,但东西是比较a为所需的值,然后调用的匹配值相应的代码。
我只需要根据
a.
我会为此使用 a std::(unordered_)map,例如:
#include <unordered_map>
#include <functional>
const std::unordered_map<char, std::function<int(int, int)>> operations = {
{'+', [](int a, int b){ return a + b; }},
{'-', [](int a, int b){ return a - b; }},
{'*', [](int a, int b){ return a * b; }},
{'/', [](int a, int b){ return a / b; }},
{'%', [](int a, int b){ return a % b; }},
// etc...
};
char a = '+';
auto op = operations.at(a);
int b = op(2, 2);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何快速将其
char转换为操作。C++ 必须stoi()将字符串转换为整数,但如何将 achar转换为操作?
你不能,不是你想的那样。
顺便说一下,哪种类型的数据是
+?在像 一样的表达式中2+2,2是一个整数,但什么是+?是方法还是什么?
它根本不是一种类型。它是一个运算符。