--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Outra coisa tb, a BOOST tem uma lib que faz o serviço sujo de
implementação de operadores a partir de uns poucos fundamentais:
http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm
Só incluí os operadores de escrita e acesso básicos pra ficar curto.
Também dá pra especializar a classe Property para se comportar como
somente leitura, por exemplo.
Tentei também uma sintaxe mais curta e parecida com C#:
int x_;
Property<int> x {
.get = [this] {
return x_*2;
},
.set = [this] (int rhs) {
x_ = rhs*2;
return *this;
}
}
Mas infelizmente o Clang ainda não suporta expressões lambda com a
nova sintaxe e nem generic initializer lists.
Vou deixar salvo e experimentar no futuro :-)
-- reuben
Acho! :-)
Aquilo foi só uma brincadeira, achei interessante a ideia.
Acho que algo como:
typedef T& (Parent::*get_fn)();
typedef void (Parent::*set_fn)(T&);
self& operator=(T&& n) {
(parent->*setfn)(n);
return *this;
}
operator const T&() {
return (parent->*getfn)();
}
Funcionaria bem com strings. E você pode sempre especializar a classe
para necessidades mais específicas.
-- reuben
int x_;
Property<int> x {
/* set */
[&](int& rhs) {
x_ = rhs-5;
},
/* get */
[&] {
return x_*2;
}
}
Mas quando é um membro a sintaxe não fica tão legal, com a
inicialização no construtor.
-- reuben
Por outro lado, acho desnecess�rio tentar pegar um idioma de outras
linguagens e tentar colocar em C++ a todo custo.
Eu j� escrevi (ou tentei, n�o lembro) h� muito tempo atr�s meus
templates de properties. Tamb�m n�o gostava do Java usar m�todos
getter/setter.
Mas no final das contas, e da�? O m�todo deixa at� muito mais claro o
que est� sendo feito.
Deixa as properties com o pessoal de Delphi e C#. Pra que tentar imitar?
Isso n�o vai adicionar nem clareza nem funcionalidade ao seu c�digo...
Adriano
On Jan 18, 2012 2:40 PM, "Adriano dos Santos Fernandes" <adri...@gmail.com> wrote:
>
> On 18-01-2012 10:05, Thiago Adams wrote:
> >
> > É meio irritante ver um monte de templates para uma coisa que o
> > compilador
> > poderia fazer de uma maneira muito mais fácil.
> >
>
> Por outro lado, acho desnecessário tentar pegar um idioma de outras
> linguagens e tentar colocar em C++ a todo custo.
>
> Eu já escrevi (ou tentei, não lembro) há muito tempo atrás meus
> templates de properties. Também não gostava do Java usar métodos
> getter/setter.
>
> Mas no final das contas, e daí? O método deixa até muito mais claro o
> que está sendo feito.
>
Concordo
> Deixa as properties com o pessoal de Delphi e C#. Pra que tentar imitar?
> Isso não vai adicionar nem clareza nem funcionalidade ao seu código...
>
Eu acho bobeira complicar para nada. Não vejo nenhum benefício real de se usar properties em C++.
Felipe Tonello
--
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Existe outras maneiras tamb�m, como criar um m�todo que retorne uma
refer�ncia (n�o-const) e que vc poderia usar um ++ ou += diretamente.
> ... mas nem sempre esse m�todo existe, e
> nem sempre voc� tem controle sobre a classe.
E as propriedades n�o v�o acabar com esse problema, a menos que vc
obrigue todos a us�-las...
Adriano
Só não esquece de deixar claro tua forma de licença, que impacta quem for usar.
Mx
2012/1/20 Thiago Adams <thiago...@gmail.com>:
Olhando o código rapidamente, vi que você usa offsetof para acessar o
objeto em que a property foi criada.
Se você tentar usar a property da classe pai em uma classe filha com
herança múltipla, isso não deveria explodir?
Até onde eu sei offsetof é indefinido para tipos non-POD.
-- reuben