Pergunta

É possível fazer algo como:

type t = int;//this would be a function which identifies what type the next argument is
if( t == int )
    printf( "%d", va_arg( theva_list, t ) );

de uma forma relativamente trivial?O único objeto que conheço que pode conter um tipo é type_info e não consigo descobrir como usá-lo dessa maneira.

Obrigado, Patrick

Foi útil?

Solução

De um modo geral, não.Os tipos só podem realmente ser armazenados, manipulados, etc., em tempo de compilação.Se você quiser algo em tempo de execução, precisará converter (geralmente por meio de uma metaprogramação bastante complicada) o tipo em algum tipo de valor (por exemplo, uma enumeração).

Talvez fosse melhor se você desse uma descrição de nível um pouco mais alto do que você realmente está tentando realizar aqui - a combinação de listas de argumentos variáveis ​​com uma tentativa de "tipo de ativação" soa como um acidente de trem prestes a acontecer. .

Outras dicas

Não da maneira que você pode pensar. Tipos como "int" são avaliados no tipo de compilação. Você deseja avaliar um tipo em tempo de execução.

Provavelmente você deseja fazer referência "t" uma função ou uma instância de uma classe que tenha uma função virtual, uma para cada tipo. Essencialmente, você deseja o padrão de comando, onde o comando é "formato um valor" e as diferentes instâncias do comando correspondem aos diferentes tipos que podem ser formatados.

Use especialização:

  void smart_print(int t)
  {
     printf("%d", i);
  }
  void smart_print(double f)
  {
     printf("%g", f);
  }

Mas com a ajuda de modelos, você também pode resolver o ponteiro para a função esperada; portanto, trate o ponteiro como identificador do tipo e será o resultado desejado

Você deve ver como o << e >> Os operadores trabalham para as classes de fluxo (Cout e CIN, por exemplo). Talvez isso lhe dê uma idéia sobre como resolver seus problemas - ou seja, funções sobrecarregadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top