Autor Tópico: Usando typedef ara criar tipos indefinidos [Resolvido]  (Lida 2216 vezes)

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Usando typedef ara criar tipos indefinidos [Resolvido]
« Online: 29 de Junho de 2010, 16:42 »
Olá pessoal, tenho tentado usar o typeof e o typedef no C para simular templates (C++), ou seja, variáveis que possam receber qualquer tipo na inicialização:

Fiz o seguinte código:

Código: [Selecionar]
#include <stdio.h>
#include <stdlib.h>

typedef T;

T ret(T value)
{
T x = value;
return x;
}

int main(int argc, char** argv)
{
T x = 9.345;
typeof (x) var;

var = 'z';

string str = "abc";
printf("%s", str);

printf("\n\n%c\n",ret('c')); //linha 1
printf("\n\n%d\n",ret(5)); //linha 2
printf("\n\n%f\n",ret(x)); //linha 3

int num = ret(5) + ret(8);

printf("%d", num);

return 0;
}

O problema é que a função ret retorna corretamente um inteiro e um char nas linhas 1 e 2 mas na linha 3 não. Ao invés de retornar o float 9.8 ou qualquer outro que eu passar, ele retorna 0.00000. Por quê?

« Última modificação: 18 de Julho de 2010, 14:06 por mhkgalvez »
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Usando typedef ara criar tipos indefinidos
« Resposta #1 Online: 03 de Julho de 2010, 14:57 »
O que você procura é um template, não um typedef...

Código: [Selecionar]
template <class T>
T min(T a, T b) {
  return (a < b) ? a : b;
}

Offline mhkgalvez

  • Usuário Ubuntu
  • *
  • Mensagens: 289
  • Não temas: A Esperança VIVE!!!
    • Ver perfil
    • The Century Truth - Conhecendo a Verdade deste Século.
Re: Usando typedef ara criar tipos indefinidos
« Resposta #2 Online: 04 de Julho de 2010, 12:27 »
Mas isso não é aceito em C. Eu sei usar templates em C++. ::)
« Última modificação: 04 de Julho de 2010, 12:30 por mhkgalvez »
"A quem vencer, eu o farei coluna no templo do meu Deus, e dele nunca sairá; e escreverei sobre ele o nome do meu Deus, e o nome da cidade do meu Deus, a nova Jerusalém, que desce do céu, do meu Deus, e também o meu novo nome."

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Usando typedef ara criar tipos indefinidos
« Resposta #3 Online: 16 de Julho de 2010, 16:15 »
Mas isso não é aceito em C. Eu sei usar templates em C++. ::)

Infelizmente não existem templates em C. Acho que o máximo que você pode ter é ponteiros para tipos indefinidos (void *)... Mas, mesmo assim, vocẽ terá que fazer casting em algum momento... Em C, o que você pode fazer é criar macros.