2012-11-28 6 views
-5

여러 템플릿 객체의 배열을 만들고 싶습니다. 무효 포인터 *템플릿 클래스 객체의 배열

Foo< A, B, C > FooItem (bar_, bor_); 
Foo < D, E, F > FooItem2 (bur_, ber_); 

myArray[0] = FooItem; 
myArray[1] = FooItem2; 

어레이 :

예를 들어, 어떻게 이러한 2 개체 가득 배열을 만들어? 고아한 배열?

감사합니다.

+0

게시물이 보여주는 것은 함수 선언입니다. 그 대상은 어디 있습니까? –

+0

질문이 모호합니다. http://whataveyoutried.com/ –

+1

'std :: vector' 및 [Boost Any] (http://www.boost.org/doc/libs/1_52_0/doc/html/any.html)를 시도해주십시오. –

답변

0

당신은 쌍의 벡터 사용할 수 있습니다 : 당신은 당신이 버틸 수의 배열을 원하는 것을 의미 있으리라 믿고있어

std::pair< Foo<A, B, C>, Foo<D, E, F> > array[size]; 
2

: 당신이 일반 데이터 배열을 원하는 대신하는 경우

std::vector< std::pair< Foo<A, B, C>, Foo<D, E, F> > > array; 

을 다른 유형의 객체. 간단한 배열은 모든 요소가 같은 유형이어야하고 어떤 객체의 유형을 결정할 방법이 없으므로 void*은 그리 쓸모가 없어서 쓸모가 없습니다 . 당신이 배열의 객체를 사용하려는 방법에 따라

다양한 가능성은 다음과 같습니다

  • 는 공통 기본 클래스를 정의하고 그 포인터를 저장. 기본 클래스가 다형성 인 경우 가상 함수 인 dynamic_cast 또는 typeid을 사용하여 개체와 상호 작용할 수 있습니다.
  • Boost.Variant은 미리 정의 된 유형 집합의 개체를 저장할 수 있습니다. 이것들은 배열에 저장 될 수 있으며, 효율적인 (여분의 리디렉션을 필요로하지 않음) 캐스팅없이 유형 안전성있는 방법으로 액세스 할 수 있습니다.
  • Boost.Any은 모든 유형의 객체를 저장할 수 있습니다.