簡體   English   中英

C ++記錄類模板的所有實例

[英]C++ book-keeping of all instantiations of a class template

在我的API中,我有一個類模板template<class T> struct MyType 我的API的用戶可以使用幾種類型實例化模板MyType (例如MyType<int>, MyType<UserType>, MyType<OtherUserType> 。在編譯時是否可以檢測到所有實例?例如, using AllInstantiations = type_list<int, UserType, OtherUserType> ?我問的原因是,我要注冊這些類型,並且在讀取字符串時,可以是“ int”,“ UserType”或“ OtherUserType”,我想查找已注冊的類型鍵入並找到匹配的一個。

請考慮任何包含“ 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中提供並封裝其他必需的類型處理邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM