所以,我在 C++ 中遇到过几次这样的事情,我真的很想写类似的东西
case (a,b,c,d) of
(true, true, _, _ ) => expr
| (false, true, _, false) => expr
| ...
但在 C++ 中,我总是会得到这样的结果:
bool c11 = color1.count(e.first)>0;
bool c21 = color2.count(e.first)>0;
bool c12 = color1.count(e.second)>0;
bool c22 = color2.count(e.second)>0;
// no vertex in this edge is colored
// requeue
if( !(c11||c21||c12||c22) )
{
edges.push(e);
}
// endpoints already same color
// failure condition
else if( (c11&&c12)||(c21&&c22) )
{
results.push_back("NOT BICOLORABLE.");
return true;
}
// nothing to do: nodes are already
// colored and different from one another
else if( (c11&&c22)||(c21&&c12) )
{
}
// first is c1, second is not set
else if( c11 && !(c12||c22) )
{
color2.insert( e.second );
}
// first is c2, second is not set
else if( c21 && !(c12||c22) )
{
color1.insert( e.second );
}
// first is not set, second is c1
else if( !(c11||c21) && c12 )
{
color2.insert( e.first );
}
// first is not set, second is c2
else if( !(c11||c21) && c22 )
{
color1.insert( e.first );
}
else
{
std::cout << "Something went wrong.\n";
}
我想知道是否有任何方法可以清除所有这些 if 和 else 的情况,因为它似乎特别容易出错。如果在 case 表达式(或 C++ 中的语句)不是详尽无遗的情况下能够像 SML 那样让编译器抱怨,那就更好了。我意识到这个问题有点模糊。也许,总而言之,如何在 C++ 中简洁地表示具有任意数量变量的详尽真值表?提前致谢。