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