我有一个模板化的类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的参数类型。
这可以实现吗?有人可以让我知道。感谢
答案 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
{
};
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;
};