从模板化类中删除模板类型

我有这个结构:

template <typename T>
using AllSettings = std::variant<
    A<T>,
    B<T>,
    C<T>,
    D<T>
>;

template typename<T>
void Foo() {
    using SettingClassT = std::variant_alternative_t<0, AllSettings<T>>;

    //....
}

是否有可能在没有<T>从的情况下获得基类SettingClassT?像这样的东西:

template <typename T>
using SettingClassBase = ... somehow remove T from SettingClassT

因为我需要分别调用其他需要基类型和T类型的模板方法。

template <template<class> class Base, typename T>
void Bar() { }

所以我可以打电话:

Bar<SettingClassBase, T>();

回答

不确定你到底想要什么但是......在我看来你正在寻找一个模板结构 getTemplatePar

template <typename>
struct getTemplatePar;

template <template <typename> class C, typename T>
struct getTemplatePar<C<T>>
 { 
   template <typename U>
   using baseType = C<U>;
 };

所以你可以写Foo()如下(感谢 Evg 和 cigien 的template更正):

template <typename T>
void Foo()
 {
   using SettingClassT = std::variant_alternative_t<0, AllSettings<T>>;

   Bar<getTemplatePar<SettingClassT>::template baseType, T>();
 }


以上是从模板化类中删除模板类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>