【问题标题】:Passing unspecialized template as a template parameter将非专业模板作为模板参数传递
【发布时间】:2011-04-21 14:18:18
【问题描述】:

我可以做类似的事情

template<class Key, class Data, class Compare = less<Key>, template<typename T> class Allocator<T> = allocator<T> >
    class mymap {
        typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
        typedef vector<Data,Allocator<Data> > storageVector;
}

因此模板被传递给未专门化的类并在以后实例化。

【问题讨论】:

    标签: c++ templates stl metaprogramming


    【解决方案1】:

    是的,这是一个最小的可编译示例:

    #include <map>
    #include <vector>
    using namespace std;
    
    template <
        class Key,
        class Data,
        class Compare = less<Key>,
        template <typename T> class Allocator = allocator
    >
    class mymap
    {
    public:
        typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
        typedef vector<Data,Allocator<Data> > storageVector;
    };
    
    int main()
    {
        mymap<int,long>::storageMap m;
        mymap<int,long>::storageVector v;
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      是的,它叫做“模板-模板参数”,语法是

      template <class Key, class Data, class Compare = less<Key>,
                template <typename T> class Allocator = allocator >
      class mymap {
          typedef map<Key,Data,Compare,Allocator<pair<const Key, Data> > > storageMap; 
          typedef vector<Data,Allocator<Data> > storageVector;
      }
      

      【讨论】:

      • codemymap.hpp(30):错误:标识符“T”是未定义的模板, class Compare = less, template class Allocator = allocator > code @mmutz 好吧,gcc 对这样的声明不满意 :)
      • @akashi: `s/= allocator/= allocator/
      • 我的错,对不起,谢谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多