c++ - 类模板的所有实例的 C++ 簿记
问题描述
在我的 API 中,我有一个类模板template<class T> struct MyType
。MyType
我的 API 的用户可以用几种类型实例化模板(例如MyType<int>, MyType<UserType>, MyType<OtherUserType>
。是否有可能在编译时检测所有实例化?有类似的东西:using AllInstantiations = type_list<int, UserType, OtherUserType>
?我问的原因是,我想注册这些类型。当阅读字符串,可以是“int”、“UserType”或“OtherUserType”,我想查找已注册的类型并找到匹配的类型。
解决方案
请考虑将包含class ...RegisteredTypes
作为std::tuple<RegisteredTypes...>
参数的任何“工厂”实现。参见示例:
template <class ... RegisteredTypes>
class Factory
{
public:
using MyRegisteredClassList = std::tuple<MyClass<RegisteredTypes>...>;
using RegisteredTypesList = std::tuple<RegisteredTypes...>;
//Specific type creation Factory method - if encapsulation required
template<class T, class ...T_Args>
static inline MyClass<T> createMyClassInstance(T_Args &&...args)
{
//TODO add 'static_assert'
//for check T as 'RegisteredTypesList' and invoke pretty warning here
return MyClass<T>(std::forward<T_Args>(args)...);
}
//TODO add your method for searching 'string' in 'RegisteredTypesList'
// use c++17 std::apply(), for example
};
这种方法的缺点是您需要Factory<int,OneType,SecondType, ...>
在客户端代码中实例化全局/静态类型作为“注册”过程的一部分。但是你可以在这个工厂中提供和封装额外的类型处理逻辑。
推荐阅读
- java - 带插入的 AsyncCqlTemplate 缓存准备好的语句
- android - 与 SymmetricDS 服务器同步时,错误导致批处理失败,但未尝试加载批处理 000--9999 的数据
- angular - 将脚本添加到 Angular 中的组件视图
- angular5 - Angular5:Dygraph 未在运行时定义
- python - 使用 python pandas 查找特定行的所有日期
- java - Gson JSON 反序列化不适用于枚举
- apache2 - 重定向除 Apache 000-default.conf 中的一个以外的所有 url
- php - 更新 Mysql 中的图像
- angularjs - 在 angularjs 应用程序中的引导动态选项卡之间导航
- git - 如何在 Git 中聚合 2 个分支