我想设计一个类来创建内部类型,这些内部类型是作为模板参数传递的类型的变体。类似于以下非功能性示例:
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] 删除。
我来说两句