gpt4 book ai didi

C++ Template 模板实例化

转载 作者:行者123 更新时间:2023-11-30 02:41:18 25 4
gpt4 key购买 nike

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

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

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

最佳答案

您缺少一个typename 和一个template:

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

Demo

关于C++ Template 模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com