Overload resolution und variadic templates



  • Hi,

    ich habe eine Klasse mit zwei Funktionen:

    template<typename T>
    class MyClass
    {
    public:
       std::size_t append( T const& obj ) // Variante 1 
       {
          ...
          return iwas;
       }
    
       template<typename ...Params>
       std::size_t append( Params&& ...args ) // Variante 2
       {
          return append( T( std::forward<Params>( args )... ) );
       }
    };
    

    Edit: Eine Variante mit einem expliziten Objekt

       template<typename ...Params>
       std::size_t append( Params&& ...args ) // Variante 2
       {
          T const obj( std::forward<Params>( args )... ) 
          return append( obj );
       }
    
    

    funktioniert.

    Die Idee ist, dass append Variante 2 mit Parametern aufgerufen werden kann, die als Parameter für den Konstruktoraufruf von T benutzt werden und dann mit dem temporären Objekt Variante 1 aufrufen. Klappt leider nicht, da sich Variante 2 selbst aufruft und iwann mit einem Stackoverflow abbricht. Was mache ich falsch?



  • Dir fehlt ein std::size_t append(T&& obj)

    Du übergibts ein rvalue und die universal reference hat höhere prio als die lvalue ref.



  • @5cript
    Jo, das war´s.
    Danke.


Anmelden zum Antworten