2010-07-16 5 views
2

많은 코드를 복사하여 붙여 넣을 필요가 없도록 C++ typedef를 일반화해야합니다. 부스트를 사용하여 블리치 어레이를 직렬화하고 있으며, 자신의 부하를 정의하고 메서드를 저장하고 템플릿 매개 변수를 기반으로이 작업을 수행해야합니다. 그것은 1,2, ..., n은 가능하면하는 유형에 대해 동일한 작업을 수행 취할 수 있도록 기본적으로 내가 높은 순서 텐서 예에 대한Typedef 일반화

typedef blitz::Array<double, 2> my_Matrix; 

을 일반화하는 방법을 모른다, 나는 위를 일반화 할 .

나는 typedef 템플릿과 같은 것을 추측하고있다.

답변

4

블리치 어레이에 대해 많이 알지는 않지만 템플릿이있는 구조체 안에 typedef를 넣을 수 있어야합니다. 예 : 예 :

template<int N> 
struct Matrix 
{ 
    typedef blitz::Array<double,N> Type; 
}; 

이렇게 사용하면 Matrix<3>::Type과 같습니다. 배열에 대한 문서보고 직렬화에 대한 다른 질문에 대해서는

은 : 당신은 그냥 크기를 호출 크기 * COLS 테스트를 행을 대체 할 수처럼

http://www.oonumerics.org/blitz/manual/blitz02.html

보이는(). 데이터() 메소드는 여전히> 2.

0

C++ 0X가있다 계급의 행렬을 위해 작동합니다 : 당신은 여전히 ​​어쨌든 loadsave에 대한 템플릿 방법이 필요합니다 그러나

template <size_t N> 
using MyMatrix<N> = blitz::Array<double,N>; 

.

0

typedef는 실제로 뭔가 다른 이름을 만듭니다. 그것은 #define과 비슷하지만 닫는 것만은 아닙니다. 그냥 다른 이름이기 때문에 대체하고있는 정확한 이름으로는 할 수없는 일을 실제로 할 수는 없습니다.

당신이 할 수있는 일은 끝까지 가서 #define을 사용하는 것입니다. 마찬가지로 :

#define my_Matrix(X) blitz::Array<X> 

개인적으로 나는 전처리기를 싫어하고 언어에서 제거하는 것을 선호합니다.