Ostatnio spotykam przykry problem, że chcę, aby określić funkcje tak:Jak korzystać z listy parametrów o zmiennej długości tylko z jednym parametrem referencyjnym?
std::string my_sprintf(const char* format, ...)
{
va_list args;
va_start(args, format);
...
}
std::string my_sprintf(const std::string& format, ...)
{
va_list args;
va_start(args, format); // error
...
}
Ale wydaje wartość odniesienia nie może być ostatni parametr przy użyciu zmiennej długości listy parametrów.
Czy jest to sposób, że mogę pozwolić użytkownikowi użyć std :: string jako ciąg formatu?
Może czynniki lub coś innego, co wykrywa std :: string i konwertuje go jako c_str(), ale nie wiem jak sobie poradzić z poniższą listą parametrów o zmiennej długości.
Edytuj: Nie używam szablonu variadic, ponieważ używam vsprintf wewnątrz. Może unikniesz używania vsprintf i używanie std :: stringstream jest opcją?
[tag: c] nie jest [tag: C++]. –
@ iharob my bad: P –
C++ sposób na użycie 'printf' jest użycie szablonów variadic [jak tutaj] (http://stackoverflow.com/questions/17671772/c11-variadic-printf-performance) – justanothercoder