![](/img/trans.png)
[英]convert type int(C::*)(int, char) to type int(int, char)
[英]Evaluate an int, char and int
我的问题是我正在处理的当前应用程序需要将一个 int 添加到另一个带有 char 的 int 中。
代码可以更好地解释它。
const char operatorArray[3] = {'+', '-', 'x'};
int randOperator = rand() % 3;
char Operator = operatorArray[randOperator];
int a = 1;
int b = 2;
所以这里我有一个是 char 的运算符(Operator)和两个整数。
我有点想要(一个操作符 b),例如 1+2 并且也把这个答案放在一个变量中。
使用switch
语句似乎很合适:
int c;
switch(Operator)
{
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case 'x':
c = a * b;
break;
}
你必须在某处定义一些代码来定义你的操作员做什么。 幸运的是,C++11 可以帮助您:
#include <iostream>
#include <map>
#include <functional>
template<typename T>
T eval(char op, T a, T b)
{
static const std::map<char, std::function<T(T, T)> > operators = {
{ '+', [](T a, T b){return a + b; } },
{ '-', [](T a, T b){return a - b; } },
{ '/', [](T a, T b){return a / b; } },
};
auto it = operators.find(op);
return it->second(a, b);
}
int main()
{
std::cout << "3 + 4 = " << eval('+', 3, 4) << std::endl;
std::cout << "3.0 - 1.5 = " << eval('-', 3.0, 1.5) << std::endl;
std::cout << "(-2.f) / 8.f = " << eval('/', -2.f, 8.f) << std::endl;
return 0;
}
用g++ -std=c++11 -Wall -Wextra -Werror main.cpp
编译。
输出:
3 + 4 = 7
3.0 - 1.5 = 1.5
(-2.f) / 8.f = -0.25
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.