C++:使用模板继承 class
C++: Inherit class with templates
我知道如何使用模板继承 类。但是说到嵌套classes/templates,我就一头雾水,网上也搜不到(可能是不知道关键字吧)
template <typename T>
class A;
template <class T1, class T2>
class B;
template < typename T1, class T2, class T3 >
class C2:
public C< A<T1>, B<T2, T3> >
{};
我希望 C2
的定义方式与 C
的定义方式相同,即 C2< A<T1>, B<T2, T3> >
而不是 C2<T1, T2, T3>
。但我不知道如何实现该目标的任何语法或解决方法。
编辑:T.C。是的,我希望最终用户只写C2< A<T1>, B<T2, T3> > foo;
,不应该允许C2<foo, bar> foo;
。
这对我有用:
template <typename T>
class A {};
template <class T1, class T2>
class B {};
template < typename T1, class T2>
class C {};
// forward declare C2 but don't define it.
template < typename T1, class T2 > class C2;
// Create the only specialization that depends on using A and B.
template < typename T1, class T2, class T3 >
class C2<A<T1>, B<T2, T3> >: public C< A<T1>, B<T2, T3> >
{};
int main()
{
C2<A<int>, B<double, float>> c1; // OK.
// This creates an instance of the
// only specialization that has
// been defined.
C2<int, double> c2; // Not OK.
// The generic template class has
// been forward declared but has not
// not been defined.
}
我知道如何使用模板继承 类。但是说到嵌套classes/templates,我就一头雾水,网上也搜不到(可能是不知道关键字吧)
template <typename T>
class A;
template <class T1, class T2>
class B;
template < typename T1, class T2, class T3 >
class C2:
public C< A<T1>, B<T2, T3> >
{};
我希望 C2
的定义方式与 C
的定义方式相同,即 C2< A<T1>, B<T2, T3> >
而不是 C2<T1, T2, T3>
。但我不知道如何实现该目标的任何语法或解决方法。
编辑:T.C。是的,我希望最终用户只写C2< A<T1>, B<T2, T3> > foo;
,不应该允许C2<foo, bar> foo;
。
这对我有用:
template <typename T>
class A {};
template <class T1, class T2>
class B {};
template < typename T1, class T2>
class C {};
// forward declare C2 but don't define it.
template < typename T1, class T2 > class C2;
// Create the only specialization that depends on using A and B.
template < typename T1, class T2, class T3 >
class C2<A<T1>, B<T2, T3> >: public C< A<T1>, B<T2, T3> >
{};
int main()
{
C2<A<int>, B<double, float>> c1; // OK.
// This creates an instance of the
// only specialization that has
// been defined.
C2<int, double> c2; // Not OK.
// The generic template class has
// been forward declared but has not
// not been defined.
}