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.