나는 다음 클래스가 있습니다클래스에 대한 캐스트 투 참조 연산자를 작성하는 방법은 무엇입니까?
int adad[3]={1,2,3};
Araye<3> araye(adad);
int (&reference)[3]=araye;
나는 다음 클래스가 있습니다클래스에 대한 캐스트 투 참조 연산자를 작성하는 방법은 무엇입니까?
int adad[3]={1,2,3};
Araye<3> araye(adad);
int (&reference)[3]=araye;
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;
.
멋진데 typedef를 사용하지 않는 방법이 있습니까? – Pooria
당신은'operator identity '처럼'identity'를 사용할 수 있습니다. :: type & (return {araye; }'. C++ 03에는 배열에 대한 참조로 변환하는 변환 함수 템플릿을 사용할 방법이 없습니다. 이 경우 크기와 기본 유형이 고정되어 있으므로 괜찮습니다. –
@Johannes : 나는 '정체성'이 있다고 생각했지만, GCC 4.2가 찌르는 것을 발견하면 놀랐다. Comeau & GCC 4.5와 마찬가지로 –