在C ++中更改模板模板参数

professional_yet_not_trackable

我想设计一个类来创建内部类型,这些内部类型是作为模板参数传递的类型的变体。类似于以下非功能性示例:

template <typename T>
class BaseClass
{
public:
    typedef T InternalType;
    std::vector<InternalType> storage;
};

template <typename Base>
class Injector
{
public:
    typedef std::pair<typename Base::InternalType, typename Base::InternalType> RefinedType;
    Base<RefinedType> refinedStorage;
};

typedef Injector<BaseClass<int> > InjectedInt; // Should store vector<pair<int, int> >

由于Base是完全指定的类型,Base<RefinedType> refinedStorage;将无法编译。简单地使用模板模板参数是行不通的,因为精化类型需要基于嵌套模板的参数及其基本类型。

如何实现基于模板参数的完全指定类型和基本类型创建类型的模式?

编辑:我希望这是一个任意深度的复合体,具有多种注入器类型,可以执行级联转换。因此,同时传递模板template参数和base参数变得非常麻烦(尤其是在处理组合的基本情况时),理想的解决方案是使用更直接的语法。

彼得

我能够通过显式地“重新声明”其内部的通用模板来实现此目的:

template <typename T>
class BaseClass
{
public:
    typedef T InternalType;
    std::vector<InternalType> storage;

    template<class T2>
    using Recur = BaseClass<T2>;
};

template <typename Base>
class Injector
{
public:
    typedef std::pair<typename Base::InternalType, typename Base::InternalType> RefinedType;
    typename Base::template Recur<RefinedType> refinedStorage;
};

typedef Injector<BaseClass<int> > InjectedInt; // Should store vector<pair<int, int> >

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章