2009-08-16 3 views
2

의 변수 번호 템플릿 ++과 같은 템플릿 :내가 C를 작성하려는 유형

template <class Type1, class Type2, class Type3,....> 

    class MyClass 
    { 
    //... 
    }; 

그러나, "유형의 수는"변수입니다.

MyClass<int, int, int> obj; 

또는 그가 5 종류의 객체를 생성 할 수 있습니다 :

예를 들어, 사용자는 3 종류의 객체를 생성 할 수 있습니다 즉

MyClass<int, int, int, int, int> obj; 

, 나는 사용자가 원하는 :
1. 필드 수를 지정하십시오.
2. 필드 수에 따라 유형을 설정하십시오.

어떻게하면됩니까?

미리 감사드립니다. .

+0

Boost.MPL : http://www.boost.org/doc/libs/1_39_0/libs/mpl/doc/index.html, 특히 'boost :: mpl :: vector'에서 살펴볼 수 있습니다. . – avakar

+0

관심이 있으신 분은 어떻게 필드 이름을 지으시겠습니까? – Indy9000

+0

나는 그 점을 생각하지 못했다. 이것은 프로그렘 일지 모르지만, 나는 대답이 이것을 할 수있는 방법이있을 것이라고 생각한다. –

답변

4

나는 Alexandrescu의 책 Modern C++ Design을 살펴 봐야한다고 생각합니다. 타입리스트에 대한 제 3 장은 당신이 원하는 것에 가깝게 보인다.

7

Variadic templates. C++0x :(

그냥 당신이 현재 C에서 그 주위를 얻을 수 있다는 언급 ++ 예를 들어, Boost::tuple에서 좀 걸릴 수 있습니다 :

#include <boost/tuple/tuple.hpp> 

int main() 
{ 
    boost::tuple<int, double> tuple1(4, 2.0); 
    boost::tuple<int, double, double> tuple2(16, 4.0, 2.0); 
} 

당신은 변수를 할당 할 수 없습니다 튜플에 숫자가 인 경우 boost::tuple을 사용하면 최대 10 개까지만 입력 할 수 있습니다 .은 이전 답변에서이를 수행하는 방법을 보여 주었지만 찾을 수 없었습니다.

+0

불행히도 이것은 (이 부분의) C++ 1x를 구현하는 컴파일러에서만 작동합니다. (어느 쪽이 이렇게합니까, BTW?) – sbi

+0

@sbi 튜플을 의미합니까? 그것은 부스트에 있으며, Variadic 템플릿이 그런 식으로 작동 할 필요가 없습니다. – AraK

+0

@AraK : Dang, 이것은 뇌간이었습니다. 그것은 게시의 상단에있는 "가변적 인 템플릿"을 말하며 나머지는 아닙니다. 혼란을 드려 죄송합니다. 어제 밤 늦었 어. – sbi

0

지금까지 유일한 해결책은 각각의 경우에 대해 별도의 템플릿을 작성하는 것입니다. 어떤 경우에는 enum을 사용하여지도 또는 유형 목록을 입력 할 수 있지만 먼저 유형을 사용하여 수행하려는 작업에 대해 더 많이 알아야합니다.

0

당신이하는 일은 충분한 수의 인수를 취하고 모든 인수에 기본 인수를 부여하기 위해이 템플릿을 작성하는 것입니다. 그런 다음 템플릿 메타 프로그래밍을 사용하여 인수를 탐색하고 기본 인수를 제거합니다.

Neils의 조언을 받아 MC++ D를 구입하십시오. 이것이 우리 대부분이이 기법을 배웠던 방법입니다.

관련 문제