int main (int argc, char * const argv[])
{
const char* op1="+";
int i = 10;
int j = 20;
int k = i op1 j; //compiler error, expected , or ; before op1
printf("k is: %i", k);
}
答案 0 :(得分:6)
当然,这很容易......
template <class T>
T execute_operator(T a, string op, T b)
{
static unordered_map<string, function<T(T,T)>> operators =
{
{ "+", [](T a, T b) { return a + b; } },
{ "-", [](T a, T b) { return a - b; } },
etc
};
return operators[op](a,b);
};
int main (int argc, char * const argv[])
{
const char* op1="+";
int i = 10;
int j = 20;
int k = execute_operator(i,op1,j);
printf("k is: %i", k);
}
答案 1 :(得分:4)
不喜欢那样。
您需要某种方法来解析该字符串,然后根据结果切换到相关代码。
你也可以考虑写一堆函数:
int add(int x, int y) { return x+y; }
int sub(int x, int y) { return x-y; }
// etc.
和一个typedef:
typedef int (*func)(int,int);
然后创建一个std::map<std::string,func>
,这将使查找过程和调用相关函数变得非常容易。