Problem mit Template template parameter ...



  • Hi,

    folgender code voller templates ... 🙄

    template<class T>
    struct f {
      ...
      };
    
    template<template<class> class TT>
    struct FFF {
      ...
      template<class T>
      struct ff {
        ...
        };
      }; 
    
    template<template<class> class TT>
    struct F {
      ...
      }; 
    
    template<template<class> class TT1, template<class> class TT2>
    void TEST (F<TT1>,F<TT2>) {
      // error: expected a class template, got FFF<F1>::ff ...
      F<FFF<TT1>::ff> test;
      ...
      }; 
    
    int main(...) {
      ...
      // klappt!
      F<FFF<f>:ff> Test;
      ...
      }
    

    Das Problem: der erste Aufruf F<FFF<TT1>::ff> test; bringt einen Fehler, der zweite F<FFF<f>::ff> Test; klappt hingegen, und ich würde gern wissen wieso ... hat jemand eine Idee? 😕

    Thx!



  • Da der Typ FFF<TT1>::ff von einem Template-Parameter abhängt (nämlich TT1), weiss der Compiler nicht dass Du einen Typ ansprechen willst. ff könnte genausogut eine Methode oder ein Datum sein. Abhilfe schafft typename:

    F<typename FFF<TT1>::ff> test;
    

  • Mod

    LordJaxom schrieb:

    Da der Typ FFF<TT1>::ff von einem Template-Parameter abhängt (nämlich TT1), weiss der Compiler nicht dass Du einen Typ ansprechen willst. ff könnte genausogut eine Methode oder ein Datum sein. Abhilfe schafft typename:

    F<typename FFF<TT1>::ff> test;
    

    allerdings ist ff kein Typ sondern ein Template. Die Begründung ist sonst sinngemäß richtig, es muss heißen

    F<FFF<TT1>::template ff> test;
    


  • Oh, soweit habe ich garnicht geschaut (hab wohl schon einen Textbaustein abgerufen). Danke camper 😉


Anmelden zum Antworten