如何从 struct/class 的元组中提取类型列表
How to extract type list from tuple for struct/class
我想在 class 中使用静态方法来获取 std::tuple<T1, T2, T3,...>
形式的类型列表。我不想使用 std::tuple<...>
,而是使用 <...>
。
如何实施示例 struct x
导致 Ts == <T1, T2, T3,...>
template<template <typename...> typename TL, typename... Ts>
struct x {
static void test() {
// expecting Ts == <int, char, float, double> (without std::tuple<>)
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
using types = std::tuple<int, char, float, double>;
x<types>::test();
在我看来,您正在寻找模板专业化。
有点像
// declaration (not definition) for a template struct x
// receiving a single template parameter
template <typename>
struct x;
// definition for a x specialization when the template
// parameter is in the form TL<Ts...>
template<template<typename...> typename TL, typename... Ts>
struct x<TL<Ts...>> {
static constexpr void test() {
// you can use Ts... (and also TL, if you want) here
std::cout << __PRETTY_FUNCTION__ << ' ' << sizeof...(Ts) << '\n';
}
};
我想在 class 中使用静态方法来获取 std::tuple<T1, T2, T3,...>
形式的类型列表。我不想使用 std::tuple<...>
,而是使用 <...>
。
如何实施示例 struct x
导致 Ts == <T1, T2, T3,...>
template<template <typename...> typename TL, typename... Ts>
struct x {
static void test() {
// expecting Ts == <int, char, float, double> (without std::tuple<>)
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
using types = std::tuple<int, char, float, double>;
x<types>::test();
在我看来,您正在寻找模板专业化。
有点像
// declaration (not definition) for a template struct x
// receiving a single template parameter
template <typename>
struct x;
// definition for a x specialization when the template
// parameter is in the form TL<Ts...>
template<template<typename...> typename TL, typename... Ts>
struct x<TL<Ts...>> {
static constexpr void test() {
// you can use Ts... (and also TL, if you want) here
std::cout << __PRETTY_FUNCTION__ << ' ' << sizeof...(Ts) << '\n';
}
};