C++中怎么检测一个结构体中是否存在某个变量

如题所述

c++ 是一门没有反射机制的语言,所以你想要的功能是没有的。

c++ 和java这种半解释型的语言不通,java编译只是生成字节码,在运行的时候会 载入 JVM,所以在程序运行中,仍然可以知道这个的类型,变量,函数,annotation等信息。

但c++ 不同,虽然他有原型声明,但那是在编译的时候用的。在程序运行中,它只知道类中有些什么类型的变量,比如int ,float,double,std::string。 但具体的这个类型是什么比如 std::string name 还是 std::string address 它不会分。

当然你也可以自己实现,比如,在类中弄一个map<string ,void*> ,来自己描述这个类。不过太麻烦。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-10-24

前段时间看到的

/* 模板函数,检查T是否有名为's'的成员
 * value 为bool型检查结果
 * type为s成员的类型(value为true是有效)
 */
template<typename T>struct has_member_s{
    template <typename _T>
    static auto check(_T)->typename std::decay<decltype(_T::s)>::type;
    static void check(...);
    using type=decltype(check(std::declval<T>()));
    enum{value=!std::is_void<type>::value};
};

使用方法

struct foo{
    int s;
};
if(has_member_s<foo>::value){
    cout<<"s"<<endl;
}

当然还可以配合enable_if使用


要注意的是,判断是在编译时期进行的!


http://blog.csdn.net/10km/article/details/51113805

本回答被提问者采纳

C++中怎么检测一个结构体中是否存在某个变量
但c++ 不同,虽然他有原型声明,但那是在编译的时候用的。在程序运行中,它只知道类中有些什么类型的变量,比如int ,float,double,std::string。 但具体的这个类型是什么比如 std::string name 还是 std::string address 它不会分。当然你也可以自己实现,比如,在类中弄一个map<string ,void*>...

C++ 在给结构体赋值时,其中几个参数不赋值,那这个几个参数的值是什么...
C++ 中在给结构体赋值时,如果未对结构体的某些成员赋值,则这些成员的值是未定义的。也就是说,它们可能是任意值,也可能是0或null,但是没有保证。如果希望结构体的某些成员默认为0或null,可以使用初始化列表(initializer list)来赋值。例如:上面的代码中,在给结构体赋值时,使用初始化列表将变量...

C\/C++ 如何判断vector中某值 是否存在!!
vector<int> vec;vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);vector<int>::iterator ret;ret = std::find(vec.begin(), vec.end(), 15);if(ret == vec.end())cout << "not found" << endl;else cout << "found it" << e...

C++中的自定义数据类型(结构体)解析
C++ 允许用户定义包含不同或相同数据类型的数据集合,这被称为结构体类型。声明结构体类型使用关键字 `struct`。结构体中的每个成员称为一个域,域表列则为结构体成员的列表。定义结构体类型变量有三种方法:首先声明结构体类型再定义变量名、在声明类型的同时定义变量或直接定义变量。直接定义变量的方式较...

如何判断结构体为空
而在C++和Java等面向对象的编程语言中,由于存在默认构造函数,可能需要额外检查结构体对象的状态来确定它是否为空。总之,判断结构体为空的方式并不是一成不变的,需要根据具体的编程语言和结构体的定义来确定。在实际编程过程中,需要根据具体需求和语言特性来选择合适的判断方式。

dev c++怎么在调试的时候把鼠标放上去就可以查看变量。
1、菜单栏:工具-环境选项。2、找到“浏览Debug变量”,在“查看鼠标指向的变量”前面选中。然后点击下方的确定。以上完成了设置!使用方法:开始调试以后,把鼠标划过右边红色圈定的那里就可以查询某个变量当前的值。显示位置在左边绿色那里。

...如何通过这个指针对这个结构体里的数据进行遍历
如果你的指针只是指向一个结构体,那不用循环啊,依次遍历就可以了,比如 struct myStruct{ int a; int b; };然后有指针: myStruct * p;假设你说的遍历指的是输出,那么只需:cout<< p->a;cout<b;就行了

c++中如何删除结构体数组中的某一项?
使用`free`函数释放成员变量的内存:free((void*)ptrNumber);free((void*)ptrName);完成内存释放后,记得删除数组本身以避免内存泄漏:delete[] myfriend;通过以上步骤,我们手动释放了结构体数组中特定项的内存。请注意,此操作需在确保数组中其他元素引用的内存已被安全释放的情况下进行。在实际应用中...

关于C++的基础问题:在结构体中能够定义string变量???
string是标准库中的复杂对象,并不是C++内建数据类型。所以不支持那种大括号内跟一个字符串的初始化赋值方式。解决办法是使用结构体的构造函数。struct test { test(const char* s): str(s){} string str;};int main(){ test test1("strtest");return 0;} ...

c\/c++如何判断变量的数据类型?
c\/c++判断变量的数据类型可以采用下面的代码:include <typeinfo> using namespace std;...cout << typeid(d).name() << endl;

相似回答