从模板化类中删除模板类型
我有这个结构:
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>();
}