, 즉 @bitmask의 대답을 확장 :
가 확인할 수있는 기준의 고정 된 수의가 가정하자.
이
enum fruit_and_vegetables {
apples = 0,
pears,
tomatoes,
cucumbers
}
enum qualifs {
is_fruit = 1,
is_sweet = 1<<1,
is_round = 1<<2,
is_tasty = 1<<3
}
const qualifs qualifs_LUT[] = { // can be generated
is_fruit | is_sweet | is_round, // apple
...
};
때문에 특정 규정의 의지를 확인하는
if (qualifs_LUT[tomato] & is_tasty)
이 된 것을 : 그래서, 대신
fruit_and_vegetables
열거의 값을 비트 마스크 사용하는, 추가 LUT를 사용할 수 있습니다 (즉, 단어의 크기로 제한됩니다)
편집 : 또 다른 흥미로운 방법입니다. @bitmask : 메소드를 (다시) 고려하십시오. 그것은 2의 거듭 제곱에 의존합니다. 그러나 소수는 어떻습니까? 열거 값에 소수를 할당하여, 더 많은 값을 squize 수 있도록 그들은 해당 제품을 가정, 더 느리게 더 성장하지 않습니다 오버 플로우 :
enum fruit_and_vegetables {
apples = 2,
pears = 3,
tomatoes = 5,
cucumbers = 7
}
if ((apples * pears * tomatoes) % tomatoes == 0)
printf("it's tasty!");
이 하나가 제어 세트에있는 항목의 수를 제한한다.
당신은 당신이 원하는 구문 달성하는 데 도움이됩니다 도우미 템플릿을 작성할 수 있습니다
토마토와 오이가 * 있습니다 * –
은 SCOTUS에 따라하지 ;-p 과일 : http://en.wikipedia.org/wiki/Tomato#Fruit_or_vegetable.3F –
@Noah :'토마토'*이며, '토마토는 *' – ruslik