代码之家  ›  专栏  ›  技术社区  ›  DarthRubik

如何从模板中获取类型和值信息

  •  0
  • DarthRubik  · 技术社区  · 8 年前

    目前,我有一个模板类,如下所示:

    template<typename T, T value>
    struct MyStruct{
       /* Stuff */
    };
    

    为了当前实例化它,我做了如下操作:

    typedef MyStruct<int, 123> struct_def;
    

    typedef typename MagicTemplate<123>::type struct_def;
    

    这将决定 MyStruct<int,123> ....

    编辑

    如果该解决方案可以与指针、成员指针、函数指针等一起使用,那也太好了。。。

    例如:

    struct OtherStruct{
      int memberA;
      long memberB;
      void foo(void);
    };
    static OtherStruct instance;
    
    
    //Expands to MyStruct<memberA OtherStruct::*, &OtherStruct::memberA>
    typedef typename MagicTemplate<&OtherStruct::memberA>::type struct_defA;
    //Expands to MyStruct<OtherStruct*,&instance>
    typedef typename MagicTemplate<&instance>::type struct_defB;
    //Expands to MyStruct<void (OtherStruct::*)(void),&OtherStruct::foo>
    typedef typename MagicTemplate<&OtherStruct::foo>::Type struct_defC;
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Yakk - Adam Nevraumont    8 年前

    您可以等待C++17。

    或者你下注;选择一种类型 T ,并且 预计与 std::integral_constant 。这会把罐子踢得更远一步;但是制造特殊类型的 integral_constant

    例如,我可以 123_k 属于类型 std::integral_constant<int,123> MyStruct<decltype(123_k)>

    MyStruct 现在匹配 template<class...>