次のようにエンコードされたタイプのタプルがあります
template<class... T>struct packed;
後で開梱したい
template<class T>struct unpack;
template<class... T>
struct unpack<packed<T...>>{
//how to define the unpacked type here?
};
だから、私はそれをとして使うことができます
template<class Packed>
struct foo : unpack<Packed>::type...{};
タプルの要素をすぐに解凍したくないことに注意してください。
template<class... T>
struct unpack<packed<T...>> : T...{};
template<class Packed>
struct foo: unpack<Packed>{};
タプルの要素を「packed」して、「unack」を介した間接的な基本クラスではなく、「foo」の直接的な基本クラスにすることに興味があります。また、タイプタプルの要素は、異なる非プリミティブタイプと非ファイナルタイプです。
例をより詳細にするには、
template<class T, T... Values>
struct variadic_values{};
template<class T,T From,class Encode,T To>
struct value_gen;
template<class T, T From, T... Values, T To>
struct value_gen<T,From,variadic_values<T,Values...>,To>
{
using type = typename value_gen<T,From+1,variadic_values<T,Values...,From>,To>::type;
};
template<class T,T From,T... Values>
struct value_gen<T,From,variadic_values<T,Values...>,From>
{
using type = variadic_values<T,Values...>;
};
template<class T, T From,T To>
using values = typename value_gen<T,From,variadic_values<T>,To>::type;
template<unsigned Idx,class T>
struct node{};
template<class Idx,class... Ts>
struct unpack;
template<unsigned... Idx,class...Ts>
struct unpack<variadic_values<unsigned,Idx...>,Ts...> : node<Idx,Ts>...{};
template<class... Ts>
class foo : unpack<values<unsigned,0,sizeof...(ts)>,Ts...>{};
私が興味を持っているのは、 sfoo
から直接派生する必要があるということです。node