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

 我来答
匿名用户
2016-10-24
展开全部
c++ 是一门没有反射机制的语言,所以你想要的功能是没有的。

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

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

当然你也可以自己实现,比如,在类中弄一个map<string ,void*> ,来自己描述这个类。不过太麻烦。
CHENGWENGJI
2016-10-24 · TA获得超过412个赞
知道小有建树答主
回答量:667
采纳率:66%
帮助的人:293万
展开全部

前段时间看到的

/* 模板函数,检查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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式