知道自己的模板参数模板的模板

时间:2014-02-24 00:19:21

标签: c++ templates

我有一个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对象。

2 个答案:

答案 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   
};