C ++记录类模板的所有实例

时间:2018-07-14 15:37:46

标签: c++ c++11

在我的API中,我有一个类模板template<class T> struct MyType。我的API的用户可以实例化具有多种类型的模板MyType(例如MyType<int>, MyType<UserType>, MyType<OtherUserType>。是否可以在编译时检测所有实例化?具有类似using AllInstantiations = type_list<int, UserType, OtherUserType>的东西吗?问是,我要注册这些类型。当读取一个字符串(可以是“ int”,“ UserType”或“ OtherUserType”)时,我要查找已注册的类型并找到匹配的类型。

1 个答案:

答案 0 :(得分:1)

请考虑任何包含class ...RegisteredTypes作为std::tuple<RegisteredTypes...>参数的'Factory'实现。参见示例:

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, ...>,作为“注册”过程的一部分。但是您可以在此Factory中提供并封装其他必需的类型处理逻辑。