Ir para conteúdo
Fórum Script Brasil
  • 0

sobrecarga de operador =


Edjlle

Pergunta

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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...