【问题标题】:In this example, how does the base template class determine the second concrete type?在本例中,基模板类如何确定第二个具体类型?
【发布时间】:2017-04-29 19:51:21
【问题描述】:
    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个类型参数,但它的派生类“OccGridMapUtilConfig”只有1个类型参数。在其构造函数中,它将“gridMap”传递给“OccGridMapUtil”的构造函数。但是根据“OccGridMapUtil”的构造函数,如何确定“ConcreteCacheMethod”的具体类型呢?

【问题讨论】:

  • 你能理解它在非模板类中的作用吗?
  • @Neil Butterworth,我没有解释清楚,现在我更新了我的问题
  • 我不明白这个问题。在OccGridMapUtil 中,ConcreteCacheMethod 一个特定的类型。如果它被用作OccGridMapUtilConfig 的基类,那么该类型恰好是GridMapCacheMethod

标签: c++ class templates


【解决方案1】:

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

更具体地说,它是实例OccGridMapUtil&lt;ConcreteOccGridMap, GridMapCacheMethod&gt;

子类是一个带有参数ConcreteOccGridMap的模板,所以在子类被实例化时会被替换,但另一个类型不是模板的一部分,所以它必须作为一个有效的完整类型存在于命名空间范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多