Edjlle Postado Janeiro 13, 2009 Denunciar Share Postado Janeiro 13, 2009 E aí galera! Este é meu primeiro post aqui no forum. É o seguinte: Como eu poderia sobrecarregar o operador =, com a passagem de um endereço para uma variável de qualquer tipo, ou seja, utilizando um ponteiro do tipo (void*). Mais ou menos assim:void operator =((void*) &value){ // aqui, quero apenas o endereço de value (pode ser string, double, int, bool, etc)!} Mas como está aí em cima dá erro, já googlei muito e não encontrei nada, será que existe alguma maneira de fazer isto? Qualquer dica eu agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Janeiro 14, 2009 Denunciar Share Postado Janeiro 14, 2009 Infelizmente, não tem como fazer desta forma.Você vai ter que fazer um cast na atribuição.Class x; int valor = 2; x = (void *) valor;Só que não sei como fica o header da função, já que referência com pointer não dá certo. (Ou dá? Na parte de C++ estudei muito pouco as referências)Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Edjlle Postado Janeiro 14, 2009 Autor Denunciar Share Postado Janeiro 14, 2009 Pois é Durub, tentei fazer de outra forma, sobrecarregando o operador comparâmetros diferentes, e depois chamando uma função com um typecast:void operator =(const int& value) { func((void*) value); } void operator =(const unsigned int& value) { func((void*) value); } // não será chamado void operator =(const long int& value) { func((void*) value); } // não será chamado void operator =(const char& value) { func((void*) value); } // não será chamado void operator =(const unsigned char& value) { func((void*) value); } // não será chamado void operator =(const string value) { func((void*) &value); } void operator =(const bool& value) { func((void*) value); } void operator =(const double value) { func((void*) &value); } O compilador aceita, mas aí vem outro problema: Se você usar o operador com uma variável do tipo unsigned int, long int, char ou unsigned char, será chamado sempre a primeira versão da sobrecarga do operador =, isso provocará um typecast automático de value, e quando for preciso recuperar o valor contido em value dentro de func(), poderei ter perda ou alteração desse valor. O que eu quero fazer com tudo isso é uma operação um pouco complexa, trata-se de um programa de uma máquina, com um microcontrolador que opera um LCD touch-screen, tenho que construir os botões, menus, timers, etc. Assim, cada objeto teria suas propriedades e eventos, tudo já está feito e funcionando bem. Estou usando templates, o que torna essa tarefa fácil: template<class Container, typename ValueType> class property{ public: //... ValueType operator =(const ValueType& value) { (this->ObjectOwner->*SetFunction)(value); // Chama a função set do objeto dono da propriedade return value; } //... private: Container* ObjectOwner; // pode ser qualquer tipo de classes void (Container::*SetFunction)(ValueType value); //... };Mas preciso substituir os templates, por questões de economia de memória (tenho 256Kb de flash)e também por questões de portabilidade (nem todos os compiladores para microcontroladores suportam templates).Se conseguir, talvez eu escreva um pequeno tutorial sobre o assuto, já que não encontrei na net como substituir templatespor código simples. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Edjlle
E aí galera! Este é meu primeiro post aqui no forum. É o seguinte:
Como eu poderia sobrecarregar o operador =, com a passagem de um endereço para uma variável
de qualquer tipo, ou seja, utilizando um ponteiro do tipo (void*).
Mais ou menos assim:
void operator =((void*) &value)
{
// aqui, quero apenas o endereço de value (pode ser string, double, int, bool, etc)!
}
Mas como está aí em cima dá erro, já googlei muito e não encontrei nada, será que existe alguma maneira de fazer isto?
Qualquer dica eu agradeço.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.