【问题标题】:c++ - Template type parameter typec++ - 模板类型参数类型
【发布时间】:2013-06-10 19:41:08
【问题描述】:

我有一个模板类 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 的参数类型。

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

【问题讨论】:

  • 我不明白你想要什么。您是否希望使用类型参数实例化 SomeClass,并确保该类型参数是 ParameterTemplateClass&lt;&gt; 的实例化?在这种情况下,模板模板参数不是您想要/需要的
  • @AndyProwl,好的,我将编辑问题以使其更清楚。
  • @AndyProwl 好的,我现在已经更新了我的问题。你有你需要的信息吗? :)

标签: c++ templates nested


【解决方案1】:

请不要说我希望类 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&lt;ParameterTemplateClass &lt;T1, T2&gt; &gt; 模板没有“限制”只使用 ParameterTemplateClass 的语义。如果你想在 `SomeClass<...> 被传递给 ParameterTemplateClass 以外的类时引发编译时错误,有一些技巧可以做到这一点,但在这种情况下使用这些技巧没有明确的动机。

编辑 3:

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

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

【讨论】:

  • 我更新了我的问题,以便更容易理解我的问题。无论如何,我认为您的答案可能是一个解决方案。唯一的问题是 Some 类也会直接依赖于 T1 和 T2,而我希望它只依赖于 T,然后 T 依赖于模板参数 T1 和 T2。不管怎样,我现在要去吃饭了。当我回来时,我会告诉你我的实验结果。谢谢
  • 问题是 SomeClass 依赖于 Type1 和 Type2,它们是 ParameterTemplateClass 的类型。播种上面的代码: typedef typename ParameterTemplateClass::Type1 Type1;
猜你喜欢
  • 2011-10-07
  • 2014-10-03
  • 2020-07-09
  • 2023-03-31
  • 1970-01-01
  • 2015-02-06
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多