1

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

template <class T_leaftype>
class BaseTrajectoryPoint {
};


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

上面的代码编译失败,出现以下错误:

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

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

4

2 回答 2

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>命名一个类型,因此您可以将其用作基类的模板参数。

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

于 2012-06-30T14:06:53.260 回答
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;
};
于 2012-06-30T15:32:32.550 回答