2010-07-20 3 views

답변

3
template <size_t size> class Araye { 
public: 
    typedef int (&array_ref)[size];  
    operator array_ref() { return araye; } 
    // ... 

또는 identity과 :

template <size_t size> 
class Araye{ 
public: 
    Araye(int input[]){ 
    for (int i=0;i<size;i++) 
    araye[i]=input[i]; 
    } 
    int araye[size]; 
}; 

어떻게 그래서 다음 작품이 클래스 캐스트에 대한 참조 - 어레이 운영자를 작성해야 (덕분에 요하네스) :

operator typename identity<int[size]>::type &() { return araye; } 

위 예제를 사용하면 효과가 있지만 대신 다음과 같은 선언을 참조하십시오

Araye<3>::array_ref reference = araye; 

보통이 필요가 없어야하지만 대부분의 요구 충당해야 첨자 연산자로 :

int& operator[](size_t i) { return araye[i]; } 

주 당신이되고 당신의 클래스를 제한에 확인하는 경우 그 집계는 대신 다음에 샘플을 단축 할 수있다 :

template <size_t size> struct Araye { 
    int araye[size]; 
    typedef int (&array_ref)[size];  
    operator array_ref() { return araye; } 
}; 

Araye<3> araye = {1,2,3}; 
Araye<3>::array_ref reference = araye; 
+0

멋진데 typedef를 사용하지 않는 방법이 있습니까? – Pooria

+1

당신은'operator identity '처럼'identity'를 사용할 수 있습니다. :: type & (return {araye; }'. C++ 03에는 배열에 대한 참조로 변환하는 변환 함수 템플릿을 사용할 방법이 없습니다. 이 경우 크기와 기본 유형이 고정되어 있으므로 괜찮습니다. –

+0

@Johannes : 나는 '정체성'이 있다고 생각했지만, GCC 4.2가 찌르는 것을 발견하면 놀랐다. Comeau & GCC 4.5와 마찬가지로 –

-1
당신은 부스트 ​​: : 배열 기능도 TR1과 확장 C++ 0X에 의해 발견을 사용할 수

.

관련 문제