@sbi는 이미 코드 생성에 대해 이야기 했으므로 예제를 들어 보겠습니다.
은 항목의 많은의 열거를 가지고, 당신은
하나의 솔루션이 다수 포함 트릭을 사용하는 것입니다 ...의 각 요소에 대한 기능의 무리를 생성하고 싶다고 말한다. 기능 모든 유틸리티를 통해 각각의 시간을 크롤링해야하지 귀하에게 달려 있습니다이 좋은 또는 hackish 여부
#define MY_ENUMERATION_META_FUNCTION(Item_) \
case Item_: return #Item_;
char const* print(MyEnum i)
{
switch(i) {
#include "myenumeration.td"
}
__unreachable__("print");
return 0; // to shut up gcc
}
#undef MY_ENUMERATION_META_FUNCTION
하지만 분명 유용합니다 :
// myenumeration.td
MY_ENUMERATION_META_FUNCTION(Item1)
MY_ENUMERATION_META_FUNCTION(Item2)
MY_ENUMERATION_META_FUNCTION(Item3)
MY_ENUMERATION_META_FUNCTION(Item4)
MY_ENUMERATION_META_FUNCTION(Item5)
그런 사람들은과 같이 사용 새로운 값이 열거 형에 추가됩니다.
나는 (아마도 지금은 바뀌이 전에 잠시에서 임) FFTW 라이브러리에서이 특정한 사용 건너했습니다. in, double, float 등 다양한 기본 유형에 대해 만들 수 있도록 여러 함수가 정의되어 있으므로 필요한만큼의 유형을 정의하고 파일을 다시 포함 할 수 있습니다. 그러나 이것은 C 라이브러리입니다. C++에서는 물론 템플릿을 사용합니다 ... –
@the_mandrill : C++에서는 템플릿이 문제에 맞지 않는 일부 상황에서 실제로 사용됩니다. 특히 부스트 전 처리기 라이브러리를 사용하면 0, 1, 2 ... N 개의 인수로 'boost :: bind'에서와 같이 자동으로 다른 수의 인수로 동일한 코드를 생성 할 수 있습니다. –
@David Rodríguez : 내가 아는 한 boost :: bind는 최대 9 개의 인수에 대해 적절한 템플릿을 제공함으로써 구현됩니다. 편집 : 좋아 내가 반환 부스트 (반환 유형이 무효입니다)로 템플릿 인수와 함수로'반환 x '상황을 피하기 위해 부스트를 찾았지만, 항상 특정 템플릿 전문화로 이것을 해결할 수 있었다. 타입'void'에 대해서. 그들은 include guard없이 route를 진행하지만,이 문제를 해결하기 위해'return' 매크로를 다시 정의 할 필요는 없습니다. – Mephane