在此示例中,基本模板类如何确定第二个混凝土类型

In this example, how does the base template class determine the second concrete type?

本文关键字:何确定 第二个 类型 混凝土      更新时间:2023-10-16
    template<typename ConcreteOccGridMap>
    class OccGridMapUtilConfig
      : public OccGridMapUtil<ConcreteOccGridMap, GridMapCacheMethod>
    {
    public:
      OccGridMapUtilConfig(ConcreteOccGridMap* gridMap = 0)
        : OccGridMapUtil<ConcreteOccGridMap, GridMapCacheMethod>(gridMap)
      {}
    };
    }

    template<typename ConcreteOccGridMap, typename ConcreteCacheMethod>
    class OccGridMapUtil
    {
    public:
      OccGridMapUtil(const ConcreteOccGridMap* gridMap)
        : concreteGridMap(gridMap)
        , size(0)
      {
        mapObstacleThreshold = gridMap->getObstacleThreshold();
        cacheMethod.setMapSize(gridMap->getMapDimensions());
      }
      ~OccGridMapUtil()
      {}

       Eigen::Vector4f intensities;
       ConcreteCacheMethod cacheMethod;
       const ConcreteOccGridMap* concreteGridMap;
       std::vector<Eigen::Vector3f> samplePoints;
       int size;
       float mapObstacleThreshold;
    }

在上面的示例中,基类" occgridmaputil"具有2个类型的参数,但是其派生的类" ockgridmaputilconfig"只有1个类型的参数。在其构造函数中,它将" GridMap"传递给" occgridmaputil"的构造函数。但是,根据" occgridmaputil"的构造函数,如何确定" ConcreteCacheMethod"的特定类型?

基类不是模板,而是该模板的实例。

更具体地说,是实例OccGridMapUtil<ConcreteOccGridMap, GridMapCacheMethod>

子类是具有参数ConcreteOccGridMap的模板,因此当亚类实例化时将被替换,但是其他类型不是模板的一部分,因此它必须在名称空间范围中作为有效的完整类型存在。

相关文章: