Werden Template Template Parameter von Visual Studio 2012 unterstützt?



  • Werden Template Template Parameter von Visual Studio 2012 unterstützt?

    Folgendes Programm compiliert bei mir nicht in VS2012:

    main.cpp:

    #include <iostream>
    #include <stdexcept>
    #include <vector>
    #include <list>
    
    using namespace std;
    
    template<typename T, template <typename S> class Collection>
    class MyCollection 
    {
    private:
       typedef Collection<T> Items;
       Items items_;        
    
    public:
       void add(T const& t) 
       { 
          items_.push_back(t); 
       }
    
       T get(int index) const
       {
          typedef typename Items::const_iterator Iter;
          for(Iter i = items_.begin(); i != items_.end(); ++i, --index)
          {
             if(index == 0)
                return *i;
          }
    
          throw runtime_error("Index out of bounds");
       }
    
       void clear()
       {
          items_.clear();
       }
    
       int size() const
       {
          return items_.size();
       }
    };
    
    int main(int argc, char* argv)
    {
       MyCollection<int,vector> integers;
       integers.add(3); 
       integers.add(4);
       integers.add(5);
    
       cout << integers.get(0) << ',' << integers.get(1) << ',' 
          << integers.get(2) << endl;
    
       MyCollection<string,list> strings;
       strings.add("three"); 
       strings.add("four");
       strings.add("five");
    
       cout << strings.get(0) << ',' << strings.get(1) << ',' 
          << strings.get(2) << endl;
    
       return 0;
    }
    

    Fehler:
    Error 1 error C3201: the template parameter list for class template 'std::vector' does not match the template parameter list for template parameter 'Collection' main.cpp 46 Testbed



  • vector besitzt eine unspezifizierte anzahl von templateparametern, aber mindestens 2. Für template-template parameter musst du aber immer die exakte Anzahl angeben *inklusive* der Parameter mit Default-Wert.

    Das was du machen willst, funktioniert also nicht.



  • otze schrieb:

    Für template-template parameter musst du aber immer die exakte Anzahl angeben *inklusive* der Parameter mit Default-Wert.

    Hat mich auch schon häufiger geärgert. Gibt es einen nachvollziehbaren Grund, warum man Parametern mit Default-Werten angeben muss?


Anmelden zum Antworten