反射 可以避免开工厂函数,实现自动注册,避免写繁琐的工厂函数代码 #include <iostream>#include <unordered_map>#include <cxxabi.h>namespace cpputil {namespace reflection {// 获取typeid(T).name()拿到的是被编码的内容,用__cxa_demangle可以得到命名空间下的名字template <typename T>std::string get_type_name() { char *demangle_name = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, nullptr); if(demangle_name) { std::string ret(demangle_name); free(demangle_name); return ret; } return "";}// Args用于展开构造函数的不同参数namespace {// 利用空命名
C++
发表于 2019-02-16 03:16:10 | 条评论 | 阅读次数:170
Copyright © 2017 - 2019 qwb's blog
blog.csustacm.com All Rights Reserved
Powered by qwb Contact me