Ir para conteúdo
Fórum Script Brasil

Edjlle

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Tudo que Edjlle postou

  1. Edjlle

    sobrecarga de operador =

    Pois é Durub, tentei fazer de outra forma, sobrecarregando o operador com parâ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 templates por código simples.
  2. 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.
×
×
  • Criar Novo...