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...
}
Je sais que je peux simplement utiliser une liste de paires ou quelque chose comme ça à la place, mais je suis intéressé par la façon de le faire tout en conservant la syntaxe de la fonction pour:
const auto formatted = descf(L"message", "arg1", arg1, "arg2", arg2);
bool
àint
lors de l'indexation, je suis donc allé avec un réelint
pour basculer l'état. Et pré-vs postfix++
prend des cycles mentaux supplémentaires pour vérifier (pour moi au moins), tandis que le séparé1 -
ne peut pas vraiment être mal lu. En bref, j'ai essayé de garder cela aussi lisible que possible, mais cela dépend bien sûr du goût personnel (ou du guide de style applicable). max66 l'a condensé beaucoup plus.std::array
au lieu d'un tableau natif semble une complication inutile.std::array<const char*, 2>
infiniment plus lisible queconst char**
. Mais encore une fois, c'est ma meilleure chance de lisibilité autour d'une syntaxe assez obscure, vous pouvez en faire ce que vous aimez dans votre propre code. Tout ce que je peux faire, c'est vous donner le point de données de ce que je considère comme lisible.C'est facile avec quelques fonctions d'assistance qui suivent le modèle suivant.
Ce n'est pas une expression de pli mais le résultat net est le même.
la source
Je suppose que vous pouvez essayer avec un index et un opérateur ternaire.
Quelque chose comme suit
la source
std::array
(qui, de toute façon, est une classe légère) mais (donc je pense que c'est préférable la réponse acceptée) est moins lisible.Le code suivant devrait faire l'affaire. Le pack de paramètres est développé dans une liste d'initialisation.
la source
args
soit convertible enstd::string
art.Avec
std::index_sequence
:Démo
la source