C ++ typeid.name()只返回char“c”

时间:2014-02-23 08:16:48

标签: c++ pointers char void typeid

我不完全确定这里发生了什么。我猜是因为我的输入是一个字符串,我一次循环一个字符,它总是作为类型字符串返回。

我非常确定字符串实际上是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);
} 

2 个答案:

答案 0 :(得分:1)

  

我希望它认识到char('9')实际上是一个int

您可以使用std::isdigit

#include <cctype>

bool digit = std::isdigit(static_cast<unsigned char>(temp[i]);

答案 1 :(得分:0)

在您的示例中,Tchargcc"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()字符串是实现定义的,这是合规行为。