property (C++)
Específicos do Microsoft
Este atributo pode ser aplicado a non-static "membros de dados virtual" em uma definição de classe ou estrutura.O compilador trata esses "membros de dados virtual" como membros de dados, alterando suas referências em chamadas de função.
__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
Comentários
Quando o compilador vê declarado com esse atributo à direita de um operador de seleção de membro de um membro de dados ("."ou"->"), ele converte a operação de um obter ou colocar função, dependendo se uma expressão como essa é um valor l ou um r-value.Mais complicado contextos, como "+=", uma reescrita é executada, fazendo ambos obter e colocar.
Esse atributo também pode ser usado na declaração de uma matriz vazia em uma definição de classe ou estrutura.Por exemplo:
__declspec(property(get=GetX, put=PutX)) int x[];
A instrução acima indica que x[] pode ser usado com um ou mais índices da matriz.Nesse caso, i=p->x[a][b] será transformado em i=p->GetX(a, b), e p->x[a][b] = i será transformado emp->PutX(a, b, i);
Específicos do Microsoft final
Exemplo
// 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;
}