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*> ,来自己描述这个类。不过太麻烦。
c++ 和java这种半解释型的语言不通,java编译只是生成字节码,在运行的时候会 载入 JVM,所以在程序运行中,仍然可以知道这个的类型,变量,函数,annotation等信息。
但c++ 不同,虽然他有原型声明,但那是在编译的时候用的。在程序运行中,它只知道类中有些什么类型的变量,比如int ,float,double,std::string。 但具体的这个类型是什么比如 std::string name 还是 std::string address 它不会分。
当然你也可以自己实现,比如,在类中弄一个map<string ,void*> ,来自己描述这个类。不过太麻烦。
展开全部
前段时间看到的
/* 模板函数,检查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使用
要注意的是,判断是在编译时期进行的!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询