1

我有一个模板类 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>
{ }

我不能让它工作。我尝试了不同的方法,包括在 C++ 中模板模板参数有哪些用途?; 但是到目前为止我还没有成功。

请不要说我希望类 SomeClass 模板参数是 ParameterTemplateClass,而不是 T1、T2,它们是 ParameterTemplateClass 的参数类型。

这可以实现吗?有人可以告诉我。谢谢

4

1 回答 1

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

编辑2:

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

 template <class T>   
 class SomeClass
 { 
 };

并将其用作:SomeClass<ParameterTemplateClass <T1, T2> > 模板没有“限制”的语义,只能使用 ParameterTemplateClass。如果你想在 `SomeClass<...> 被传递给 ParameterTemplateClass 以外的类时引发编译时错误,有一些技巧可以做到这一点,但在这种情况下使用这些技巧没有明确的动机。

编辑 3:

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

template <class T>
class SomeClass
{ 
  typedef typename T::Type1 Type1;
  typedef typename T::Type2 Type2;
};
于 2013-06-10T19:48:49.083 回答