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使用


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


本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网