关于c ++:使用模板叶类的奇怪重复模板

Curiously recurring templates with template leaf classes

我正在考虑为我的应用程序使用奇怪的重复模板模式。但是,我希望类对用户定义的类型进行操作。我想知道是否可以创建类似于下面所示的结构:

1
2
3
4
5
6
7
8
9
10
template <class T_leaftype>
class BaseTrajectoryPoint {
};


template <class MyType>
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint> {
    private:    
        MyType A;
};

以上代码编译失败,错误如下:

type/value mismatch at argument 1 in template parameter list for ‘template class BaseTrajectoryPoint’

有没有其他方法来解决这个问题?我希望使用静态多态性,但我更希望在基类中定义所有可能的方法。


1
2
3
4
5
6
7
8
9
10
template <class T_leaftype>
class BaseTrajectoryPoint {
};


template <class MyType>
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint<MyType> > {
    private:    
        MyType A;
};

MyTrajectoryPoint不是一个类型,它是模板;当您将它作为模板参数传递时,它被视为template class T>,而不是template,后者是您的基类所期望的。但是MyTrajectoryPoint命名了一个类型,因此可以将它用作基类的模板参数。

当然,您可以将BaseTrajectoryPoint的声明更改为template class T_leaftype>的声明,但是您必须使用类模板作为模板参数,而不是完整的类型。


我们的朋友Griwes所说的是正确的,但是如果您知道将继承BaseTrajectoryPoint的每个类都是模板类,则可以执行以下操作:

1
2
3
4
5
6
7
8
9
template<template < class > class TLeaf> // << This means: It is expected a template class as parameter
class BaseTrajectoryPoint{
};

template <class MyType>
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint> >{
    private:
        MyType A;
};