带有模板叶类的奇怪重复出现的模板
Curiously recurring templates with template leaf classes
本文关键字:叶类 更新时间:2023-10-16
我正在考虑为我的应用程序使用奇怪的重复模板模式。但是,我希望类对用户定义的类型进行操作。我想了解是否可以创建类似于下面显示的结构:
template <class T_leaftype>
class BaseTrajectoryPoint {
};
template <class MyType>
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint> {
private:
MyType A;
};
上面的代码编译失败,并显示以下错误:
"模板类基轨迹点"模板参数列表中参数 1 的类型/值不匹配
有没有其他方法来解决这个问题?我想使用静态多态性,但我更愿意在基类中定义所有可能的方法。
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>
,但是您必须使用类模板作为模板参数,而不是完整的类型。
我们的朋友 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;
};