C ++ typeid.name () возвращает только символ «c»

0

Я не совсем уверен, что здесь происходит. Я угадываю, потому что мой ввод - это строка, и я еду через него по одному символу за раз, когда он всегда возвращается как символ типа.

Я уверен, что строка на самом деле char *. Единственный способ, который я могу исправить, это включить и проверить, какой тип персонажа он есть, но я бы хотел избежать этого. Есть ли альтернативный метод, использующий typeid.name(), чтобы выяснить, что такое char?

Я использую gcc-компилятор

voidQueue outQueue;
string temp = "32ad1f-31f()d";

int i = 0;
while(temp[i] != '\0')
{
    outQueue.enqueue(temp[i]);
    i++;
}

template<typename T>
void voidQueue::enqueue(T data)
{
    T *dataAdded = new T;
    *dataAdded = data;
    string type(typeid(data).name());
    cout<< type;
    myQueue::enqueue((void *)dataAdded,type);
} 
  • 0
    Обратите внимание, что name возвращает строку, определяемую реализацией.
  • 1
    data - это char Какую проблему ты пытаешься решить?
Показать ещё 2 комментария
Теги:
pointers
char
void

2 ответа

1
Лучший ответ

я хочу, чтобы он распознал, что char ('9') на самом деле является int

Вы можете использовать std::isdigit для этого:

#include <cctype>

bool digit = std::isdigit(static_cast<unsigned char>(temp[i]);
  • 0
    Я хотел избежать этого, но я думаю, что это единственный способ, которым я смогу это сделать. По крайней мере, сейчас я пойду с этим, спасибо за вклад.
0

В вашем примере T является char и gcc возвращает "c" для typeid(char).name(), как показано в следующей программе:

#include <iostream>
#include <typeinfo>

int main() {
  std::cout << typeid(char).name() << std::endl;
  std::cout << typeid(short).name() << std::endl;
  std::cout << typeid(int).name() << std::endl;
  std::cout << typeid(long).name() << std::endl;
}

В моем компиляторе это печатает

c
s
i
l

Учитывая, что строки name() определены реализацией, это совместимое поведение.

  • 0
    Вы знаете, что это за тип, если он печатает Ph?
  • 0
    @NPE, у вас есть источник для списка этих? Например, я получаю «х», но я не знаю, что это такое: - /

Ещё вопросы

Сообщество Overcoder
Наверх
Меню