Usando typedef ara criar tipos indefinidos [Resolvido]

Iniciado por mhkgalvez, 29 de Junho de 2010, 16:42

tópico anterior - próximo tópico

mhkgalvez

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:

#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ê?

"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."

fpissarra

O que você procura é um template, não um typedef...

template <class T>
T min(T a, T b) {
  return (a < b) ? a : b;
}

mhkgalvez

#2
Mas isso não é aceito em C. Eu sei usar templates em C++. ::)
"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."

fpissarra

Citação de: mhkgalvez online 04 de Julho de 2010, 12:27
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.