这里所有,快捷方便......
我正在编写一个运行其他bool函数的Evaluate函数。现在,我基本上做了一个if,else if循环(见下文)。有关另一种方式的建议???我假设我可以用开关做这个,但从来没有像这样使用过它们。
int i = 78;
if (isPrime(i))
{
cout <<"is prime" << endl;
return;
}
else if (ismultipleOf23(i))
{
cout <<"is a multiple of 23" << endl;
return;
}
else if (isEven(i))
{
cout <<"is Even" << endl;
return;
}
else if (isOdd(i))
{
cout <<"is Odd" << endl;
return;
}
答案 0 :(得分:3)
您不能使用开关,因为标签必须是常量。
你正在做的是正确的方法。
答案 1 :(得分:1)
你可以删除所有的回报,你不需要检查奇数,因为如果它不是偶数,那就必须是奇数。
int i = 78;
if (isPrime(i))
{
cout <<"is prime" << endl;
}
else if (ismultipleOf23(i))
{
cout <<"is a multiple of 23" << endl;
}
else if (isEven(i))
{
cout <<"is Even" << endl;
}
else
{
cout <<"is Odd" << endl;
}
return; // This is also optional
答案 2 :(得分:1)
对于这么少的测试来说这是不值得的,但是如果你有很多测试,你可以把它们放在一个列表中并迭代它们:
#include <iostream>
#include <string>
using namespace std;
struct TEST {
bool (*func)(int);
string msg;
};
bool isMult23(int i) { return i % 23 == 0; }
bool isEven(int i) { return i % 2 == 0; }
bool isOdd(int i) { return !isEven(i); }
bool isOther(int i) { return true; } // sentinel, always true
TEST test[] = {
isMult23,"is multiple of 23",
isEven,"is even",
isOdd,"is odd",
isOther,"is something else"
};
string eval(int value)
{
int i = 0;
while(!test[i].func(value))
i++;
return test[i].msg;
}
int main()
{
cout << eval(46) << endl;
cout << eval(78) << endl;
cout << eval(81) << endl;
return 0;
}
is multiple of 23
is even
is odd
答案 3 :(得分:0)
你可以用模板,lambdas等做一些疯狂的事情,这样你就可以轻松添加新测试并循环测试,成功执行lambda并返回......
但这样做太过分了,需要一个符合标准的编译器(因为C ++ 11现在已成为标准,我对这个声明感到满意)。