【发布时间】: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。