Hey,
mam taką syganturę funkcji(lista argumentów jest zmienna!! dlatego muszę użyć z mechanizmu Variadic templates ):

tprintf("{1} {3} + {2} = {4} {1}.", "11", 7.5 , 4, 11.5);

wynik ma jej być taki:

11 4 + 7.5 = 11.5 11.

do jej utworzenia mam skorzystać z tego mechanizmu template< typename... Targs>
Jeśli sygantura ma postać taką

tprintf("{} world{} {} {} {}\n","Hello",'!',123," Je", "end");

Z taką postacią funkcji poradziłem sobie bez problemu wystarczy tylko przeiterować po argumentach i je wypisywać. Jednak kiedy w nawiasach mam podane, który argument ma być użyty to sama iteracja nie wystarczy. Wydaje mi się, że muszę najpierw zapisać do tablicy stringów wszystkie Targsy oprócz wzorca tekstu. Bo wydaje mi się, że muszę najpierw znać wszystkie argumenty funkcji a później je dopasowywać do odpowiedniego miejsca we wzorcu tekstu. Problem w tym jak to zrobić. Dokładniej jak w szablonowej funkcji(typu Variadic templates) zapisać do stringa jej argumenty.

Zrobiłem coś takiego(funkcja ma zapisywać do stringa argumnety):

template<typename... Args> inline string pass(Args&&...) {return "End";}

template<typename T>
string some_function(T a){
    std::ostringstream ostr;
    ostr << a;
    //cout<<ostr.str();
    return ostr.str();
}

  template<typename... Args> inline void expand(Args&&... args) {
    string a="";

    a.append(pass( some_function(args)... ))<<endl;

    cout<<" result "<<a<<endl;
  }

struct pass {
    template<typename ...T> pass(T...) {}
  };

Wywołanie tego daje tylko napis End i wiem dlaczego tak się dzieje. Ponieważ wywołuję rekurencyjnie funkcję pass i w szablonie expand pojawia się jej ostanie wywołanie, które zwraca End a nie wszystkie elementy stringa. Niestety nie wiem jak mam to zrobić. Może moje podejście jest błędne do tej implementacji tej funkcji.
Mam pytanie jak to zrobić?