template<class Msg, class... Args>
std::wstring descf(Msg, Args&&... args) {
std::wostringstream woss;
owss << Msg << ". " << ... << " " << args << ": '" << args << "' ";//not legal at all
//or
owss << Msg << ". " << args[0] << ": '" << args[1] << "' " << args[2] << ": '" << args[3] << "' "; //... pseudo code, and so on...
}
Ich weiß, dass ich stattdessen nur eine Liste von Paaren oder ähnliches verwenden kann, aber ich bin daran interessiert, wie dies zu tun ist, während die Syntax der Funktion wie folgt beibehalten wird:
const auto formatted = descf(L"message", "arg1", arg1, "arg2", arg2);
bool
zuint
bei der Indizierung nicht, also habe ich mich für eine tatsächliche Konvertierung entschieden ,int
um den Status umzuschalten. Und Pre-vs-Postfix++
benötigt zusätzliche mentale Zyklen, um dies zu überprüfen (zumindest für mich), während das separate1 -
nicht wirklich falsch verstanden werden kann. Kurz gesagt, ich habe versucht, dies so lesbar wie möglich zu halten, aber dies hängt natürlich vom persönlichen Geschmack (oder dem entsprechenden Styleguide) ab. max66 verdichtete es viel mehr.std::array
anstelle eines nativen Arrays scheint eine sinnlose Komplikation zu sein.std::array<const char*, 2>
unendlich lesbarer finde alsconst char**
. Aber auch dies ist mein bester Versuch, die Lesbarkeit einer ziemlich obskuren Syntax zu verbessern. Sie können damit machen, was Sie in Ihrem eigenen Code mögen. Ich kann Ihnen nur den Datenpunkt geben, den ich für lesbar halte.Dies ist mit einigen Hilfsfunktionen, die dem folgenden Muster folgen, einfach.
Dies ist kein Fold-Ausdruck, aber das Nettoergebnis ist dasselbe.
quelle
Ich nehme an, Sie können es mit einem Index und einem ternären Operator versuchen.
Etwas wie folgt
quelle
std::array
(das ist sowieso eine leichte Klasse) vermieden wird, aber (daher halte ich die akzeptierte Antwort für vorzuziehen) weniger lesbar ist.Der folgende Code sollte den Trick machen. Das Parameterpaket wird in einer Initialisierungsliste erweitert.
quelle
args
instd::string
s konvertierbar sind .Mit
std::index_sequence
:Demo
quelle