2011-08-27 4 views
2

int 형식의 템플릿을 기반으로 인수를 생성 할 수 있습니까?템플릿 매개 변수를 기반으로 한 열거 형 인수?

내가 좋아하는 뭔가를 생성하고 싶은

template<int num> 
void func(int g,...){} 

경우 NUM = 제 기능을 무효 FUNC가됩니다 (10) 다음 내가 좋아하는 것 (INT의 g, INT의 GG를, ....., INT gggggggggg);

이것이 가능한지 알고 싶습니다. 고맙습니다.

+2

C++ 11이 있습니까? –

답변

2

Variadic 함수 인수 a la <cstdarg>은 typesafe가 아니며 C++에서는 좋지 않습니다. C++ 11을 사용하는 경우 훨씬 더 나은 결과를 위해 가변 템플릿을 사용할 수 있습니다.

다양성 함수 인수와 함께 가고 싶다면 함수에 어떤 인수가 있고 얼마나 큰지를 함수에 알려줘야합니다. 전통적으로, 여러분은 그러한 정보를 인수 중 하나 (예 : printf)에 전달합니다. 원한다면 그 효과에 템플릿 매개 변수를 사용할 수 있지만 어쨌든 최소한 하나 이상의 가변 인수를 가져야하므로 실제로 필요하지 않습니다. 가장 중요한 점은 함수를 템플릿으로 만들면 각 N에 대해 코드 조각을 인스턴스화합니다!

요약하면 : 가변 함수를 사용하지 마십시오. variadic 함수를 사용해야 할 경우 템플릿을 사용하지 마십시오.

1

C++ 11을 통해 가변성 매크로에 액세스 할 수없는 경우 PUMP과 같은 외부 메타 프로그래밍 도구를 사용해보십시오.

는 지금 같은 C++ 소스 실제로 유효한 C++ 소스 무언가에 무언가에서 번역하는 추가 도구를 사용하고 있기 때문에이, 당신의 빌드 프로세스를 복잡하게 경고합니다.

Boost Preprocessor library과 같은 것을 볼 수도 있는데, 이는 여분의 도구가 필요하지 않지만 작업하기가 더 어렵습니다.

관련 문제