c ++ - 模板类型参数类型

时间:2013-06-10 19:41:09

标签: c++ templates nested

我有一个模板化的类ParameterTemplateClass,它是另一个模板化类的参数类型。

基本上我的代码如下所示。

template <class T1, class T2>
    class ParameterTemplateClass
    { 
      typedef T1 Type1;
      typedef T2 Type2;
    };


    template <ParameterTemplateClass<template<class T1, class T2> > >
    class SomeClass
    { 
      typedef typename ParameterTemplateClass::Type1 Type1;
      typedef typename ParameterTemplateClass::Type1 Type1;
    };

template<>
class SpecializedClass::ParameterTemplateClass<int, float>
{ }

template<>
class SomeSpecializedClass::SomeClass<SpecializedClass>
{ }

我无法让这个工作。我尝试了不同的方法,包括What are some uses of template template parameters in C++?所示的方法;但到目前为止我还没有成功。

请注意,我不希望类SomeClass模板参数为ParameterTemplateClass,而不是T1,T2,它们是ParameterTemplateClass的参数类型。

这可以实现吗?有人可以让我知道。感谢

1 个答案:

答案 0 :(得分:4)

  

请注意,我不希望类SomeClass模板参数为ParameterTemplateClass,而不是T1,T2,它们是ParameterTemplateClass的参数类型。

这不是模板处理的语义 - 你能给出一个更详细的例子吗?

如果要引用ParameterTemplateClass,则在SomeClass中明确使用它,例如,

template <class T1, class T2 >
class SomeClass
{ 
    ParameterTemplateClass <T1, T2> foo;
};

编辑:

如果你想让SomeClass采用模板化的类,可以表达如下:

template <template <class T1, class T2> class T>   class SomeClass
{ 
};

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Ftemplate_template_arguments.htm

EDIT2:

如果SomeClass不应该知道T1和T2,那么将其实现为:

 template <class T>   
 class SomeClass
 { 
 };

并将其用作:SomeClass<ParameterTemplateClass <T1, T2> > 模板没有“限制”的语义,只使用ParameterTemplateClass。如果你想要一个编译时错误,如果`SomeClass&lt; ...&gt;传递一个除ParameterTemplateClass以外的类,有一些技巧可以做到这一点,但没有明确的动机在这个上下文中使用它们。

编辑3:

根据对问题的修改进行修改。您可以将typedef表示为:

template <class T>
class SomeClass
{ 
  typedef typename T::Type1 Type1;
  typedef typename T::Type2 Type2;
};