C++语言中怎么通过字符串中的struct name获取到struct type
可以使用C++的反射机制,即使用模板元编程和SFINAE技术来实现。
具体做法是,定义一个模板结构体,以字符串作为模板参数,然后使用SFINAE技术来筛选出字符串对应的结构体类型。代码示例:
template <typename T, typename = void>
struct get_struct_by_name {
using type = void;
};
template <typename T>
struct get_struct_by_name<T, std::enable_if_t<std::is_same_v<T, "my_struct">>> {
using type = my_struct;
};
// 使用方式
using my_struct_t = typename get_struct_by_name<"my_struct">::type;
在上面的代码中,get_struct_by_name是一个模板结构体,它有两个模板参数,第一个是要获取的结构体名称,第二个是SFINAE技术用到的占位类型(默认为空,即不使用SFINAE技术)。
当第一个模板参数为"my_struct"时,第二个模板参数的std::enable_if_t条件成立,此时get_struct_by_name结构体有一个type成员,它的值为my_struct类型。
使用时,可以通过get_struct_by_name结构体的type成员来获取对应的结构体类型
原文地址: https://www.cveoy.top/t/topic/cJTq 著作权归作者所有。请勿转载和采集!