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.