Я не совсем уверен, что здесь происходит. Я угадываю, потому что мой ввод - это строка, и я еду через него по одному символу за раз, когда он всегда возвращается как символ типа.
Я уверен, что строка на самом деле 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);
}
я хочу, чтобы он распознал, что char ('9') на самом деле является int
Вы можете использовать std::isdigit
для этого:
#include <cctype>
bool digit = std::isdigit(static_cast<unsigned char>(temp[i]);
В вашем примере 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()
определены реализацией, это совместимое поведение.
name
возвращает строку, определяемую реализацией.data
- этоchar
Какую проблему ты пытаешься решить?