Estou usando o Arduino e gostaria de saber se existe uma função que retorna o tipo de dados de uma variável. Ou seja, eu gostaria de executar algo como o seguinte:
// Note: 'typeof' is a sample function that should return the data type.
Serial.println(typeof(myVar));
Respostas:
Em um programa C ++ típico, você usaria o
typeid
operador da seguinte maneira:No entanto, isso requer um recurso do compilador chamado Runtime Type Information (RTTI). Ele está desativado no IDE do Arduino, provavelmente porque tende a aumentar os requisitos de memória de tempo de execução do programa.
Você pode obter mais informações sobre o custo do recurso aqui: /programming/579887/how-expensive-is-rtti
Qualquer compilador C ++ com recursos completos definitivamente suportará RTTI. Se você quiser tentar usar um IDE de terceiros (como o Eclipse, com o plug-in do Arduino), poderá ativá-lo facilmente. Provavelmente não vale a pena o aborrecimento apenas por isso.
Alternativa
Uma solução de melhor desempenho (mas menos flexível) seria usar uma abordagem de classe de características. Isso envolve alguma meta-programação de modelos:
Você pode adicionar
MAKE_TYPE_INFO(..)
linhas para qualquer tipo que desejar, incluindo os nomes de classes personalizadas. Você poderia usá-lo assim:Tudo o que você não definir usando
MAKE_TYPE_INFO(..)
será exibido como"unknown"
.Isso é algo bastante avançado, então não tentarei explicar como tudo funciona aqui. Existem vários tutoriais na Web sobre programação de modelos C ++, se você estiver interessado.
EDIT: Vale a pena notar que o
typeof
operador não é C ++ padrão, mas é suportado por alguns compiladores, como o GCC. É basicamente um equivalente antigodecltype
, que aparece no padrão C ++ 11.fonte
Eu uso uma abordagem estúpida simples ...
Este é o conceito de polimorfismo em que várias funções com diferentes tipos de parâmetros são criadas, mas com o mesmo nome de função . Durante o tempo de execução, a função que corresponde ao número certo de argumentos e aos tipos de argumentos será chamada. Espero que esta explicação ajude.
fonte