奇怪的重复模板与模板叶类

时间:2012-06-30 14:05:19

标签: c++ oop polymorphism crtp static-polymorphism

我正在考虑为我的应用程序使用奇怪的重复模板模式。但是,我希望这些类能够在用户定义的类型上运行。我想了解是否可以创建类似于下面所示的结构:

template <class T_leaftype>
class BaseTrajectoryPoint {
};


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

上面的代码无法编译,并出现以下错误:

  

模板参数列表中参数1的类型/值不匹配'模板类BaseTrajectoryPoint'

有没有其他方法可以解决问题?我想使用静态多态,但我更喜欢在基类中定义所有可能的方法。

2 个答案:

答案 0 :(得分:5)

template <class T_leaftype>
class BaseTrajectoryPoint {
};


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

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

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

答案 1 :(得分:0)

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

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;
};