我有一个Resource类是模板,Compare是可以比较的任何类。
我有一个ResourceManager<资源>
但是我无法弄清楚如何让ResourceManager知道Resource的Compare模板。
这是什么模板语法。我设法得到了这个
template< template< class Compare > class ResType, class Compare >
class ResourceManager
但是这使得callsite看起来像我不想要的那样。
ResourceManager< Resource<Compare>, Compare> manager;
我想做
ResourceManager<Resource<Compare>> manager;
我需要能够在资源管理器中创建一个Compare对象。
答案 0 :(得分:4)
执行此操作的最佳方法以及STL使用的方法是让Resource
模板类将其模板参数公开为公共typedef
,然后您可以在其中轻松引用ResourceManager
模板:
template<class Compare>
class Resource {
// ...
public:
typedef Compare compare;
};
template<class Resource>
class ResourceManager {
// return an instance of Resource's Compare type
typename Resource::compare comp() const {
return typename Resource::compare();
}
};
答案 1 :(得分:0)
有使用模板专业化的解决方案:
template < class >
class ResourceManager;
template < template < class > class ResType, class Compare >
class ResourceManager< ResType<Compare> >
{
public:
// implementation of ResourceManager template
};