【发布时间】:2018-07-14 15:37:45
【问题描述】:
在我的 API 中,我有一个类模板 template<class T> struct MyType。我的 API 的用户可以用多种类型实例化模板 MyType(例如 MyType<int>, MyType<UserType>, MyType<OtherUserType> 。是否有可能在编译时检测所有实例化?有类似的东西:using AllInstantiations = type_list<int, UserType, OtherUserType>?我问的原因是,我想要注册这些类型。当读取一个字符串时,可以是“int”、“UserType”或“OtherUserType”,我想查找注册的类型并找到匹配的类型。
【问题讨论】:
-
做这样的事情的通常方法是拥有一个静态数据成员,它的初始化用一些全局单例注册实例化。这不会为您提供编译时类型列表,而是在输入
main之前完全构建的运行时数据结构。您设想的类型列表是不可能的,因为不同的实例化可能出现在不同的翻译单元中,并且只会在链接时聚集在一起。 -
你可以用
std::variant做一些有创意的事情。