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

Remove template type from templated class

我有这样的结构:

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>>;

    //....
}

是否可以从 SettingClassT 获得没有 <T> 的基础 class? 像这样:

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>();
 }