Właśnie napisałem ogólną fabrykę obiektów i używając metadiblioteki preprocessora boost, utworzyłem szablon variadic (używając 2010 i nie obsługuje ich). Moja funkcja używa referencji rval i std::forward
, aby wykonać perfekcyjne przekazywanie i przyszło mi do głowy ... kiedy wychodzi C++ 0X i miałem standardowy kompilator, robiłbym to z prawdziwymi szablonami variadic. Jak jednak, czy mogę nazwać argumenty na std::forward
?W jaki sposób wywołać std :: forward dla wszystkich argumentów w funkcji variadic?
template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
y(std::forward(...params)); //? - I doubt this would work.
}
Jedynym sposobem mogę myśleć wymaga ręcznego rozpakowywanie ... params i nie jestem całkiem tam jeszcze obaj. Czy istnieje szybsza składnia, która działałaby?
Dodaj do tego, jak parametry powinny być przekazywane. Myślę, że tutoriale pokazują 'void f (Params && ... params)' – UncleBens
@ Wuj: Dodano, myślę, że masz rację. – GManNickG
W rozmowach takich jak pirackie dni używam 'void f (Ar && ... arg)' – woolstar