C++ Template 模板实例化

C++ Template Template Instantiation

我有以下可变参数包的封装代码。

template <typename... Args>
struct pack
{
};

template <template <typename... Args> class ENCAP, typename... Args>
struct encapsulate_arguments
{
    typedef pack<ENCAP<Args>...> type;
};

template <template <typename... Args> class ENCAP, typename... Args>
struct encapsulate_arguments<ENCAP, pack<Args...>>
{
    typedef pack<ENCAP<Args>...> type;
};

template <typename L>   
struct Master
{
    template <typename T>
    struct Slave
    {
        typedef T type; 
    };
};

这适用于封装可变参数包,例如:

typedef encapsulate_arguments<Master<float>::Slave, double, int>::type foo;

typedef encapsulate_arguments<Master<float>::Slave, pack<double, int>>::type foo;

typedef encapsulate_arguments<std::vector, pack<double, int>>::type foo;

它不依赖于另一个模板参数 - 导致定义以下内容:

pack<Master<float>::Slave<double>, Master<float>::Slave<int>>

pack<std::vector<double>, std::vector<int>>

问题是,如果我想让封装模板参数 ENCAP 类型依赖,我无法编译它:

template <typename L>   
struct Other
{
// ARGGH!!!
//  typedef encapsulate_arguments<Master<L>::Slave, pack<double, int>>::type EmbeddedType;
};

http://ideone.com/ZwfVaU

这甚至可能吗和/或我怎样才能让它发挥作用?

您缺少 typenametemplate:

typedef typename encapsulate_arguments<
//      ^^^^^^^^
    Master<L>::template Slave, pack<double, int>
//             ^^^^^^^^
>::type EmbeddedType;

Demo