속성 (C++)
Microsoft 전용
이 특성은 클래스 또는 구조체 정의에서 비정적 "가상 데이터 멤버"에 적용할 수 있습니다. 컴파일러는 해당 참조를 함수 호출로 변경하여 이러한 "가상 데이터 멤버"를 데이터 멤버로 처리합니다.
__declspec( property( get=get_func_name ) ) declarator
__declspec( property( put=put_func_name ) ) declarator
__declspec( property( get=get_func_name, put=put_func_name ) ) declarator
설명
컴파일러가 멤버 선택 연산자("." 또는 "->")의 오른쪽에서 이 특성을 사용하여 선언된 데이터 멤버를 확인하면 해당 식이 I-value인지 아니면 r-value인지에 따라 get 또는 put 함수로 연산을 변환합니다. "+="와 같은 보다 복잡한 컨텍스트에서는 get 및 put을 둘 다 수행하여 다시 작성됩니다.
이 특성은 클래스 또는 구조체 정의에 있는 빈 배열의 선언에서도 사용할 수 있습니다. 예를 들면 다음과 같습니다.
__declspec(property(get=GetX, put=PutX)) int x[];
위의 문은 x[]를 하나 이상의 배열 인덱스와 함께 사용할 수 있음을 나타냅니다. 이 경우 i=p->x[a][b]가 i=p->GetX(a, b)로 바뀌고 p->x[a][b] = i가 p->PutX(a, b, i);로 바뀝니다.
Microsoft 전용 종료
예제
// declspec_property.cpp
struct S {
int i;
void putprop(int j) {
i = j;
}
int getprop() {
return i;
}
__declspec(property(get = getprop, put = putprop)) int the_prop;
};
int main() {
S s;
s.the_prop = 5;
return s.the_prop;
}