如何使用typeid来确定指针中数据的类型
How to use typeid to to figure its type for the data in a pointer?
我有一个栈类的push item函数。我想检查*数据是否有空值,如果有返回异常。问题是我为字符串创建了堆栈类,后来更改了它,以便可以使用泛型类型。现在*data->data()不能用于除字符串以外的任何其他类型。所以我想检查每个*数据类型。所以我添加了一个If语句来检查指针Id是否像字符串。
因此,通过这样做,我希望if(*data->data()只对字符串执行。但问题是它也会检查整数。我一直得到这个错误:错误:成员引用基类型'int'不是一个结构或联合。如何解决这个问题? void push(Node<T> **head,T *data){
string s = typeid(*data).name();
if(s=="NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"){
if(*data->data() == NULL){
throw NoDataException();
}
}
else{
if(s=="i"){
cout<<"here"<<endl;
}
}
Node<T> *temp = new Node<T>;
temp->data = data;
temp->next = *head;
*head = temp;
};
使用辅助函数进行检查。
增加以下功能:
// A generic function for all types.
template <typename T> bool isEmpty(T const& t) { return false; }
// An overload for std::string.
bool isEmpty(std::string const& s) { return s.empty(); }
然后,替换为:
string s = typeid(*data).name();
if(s=="NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE") {
if(*data->data() == NULL){
throw NoDataException();
}
}
else{
if(s=="i"){
cout<<"here"<<endl;
}
}
if ( isEmpty(*data) ) {
throw NoDataException();
} else {
// ...
}
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何获取C++字符数据类型的地址
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 构造智能点数据类型以及普通数据类型的通用方法
- 如何使映射键具有两种不同的数据类型?
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?