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...
}
Я знаю, что вместо этого я могу просто использовать список пар или что-то в этом роде, но мне интересно, как это сделать, сохранив синтаксис функции:
const auto formatted = descf(L"message", "arg1", arg1, "arg2", arg2);
bool
вint
во время индексации, поэтому я пошел с фактическим,int
чтобы переключить состояние. И прежде чем postfix++
требует дополнительных умственных циклов для проверки (по крайней мере для меня), в то время как отдельное1 -
не может быть действительно истолковано. Короче говоря, я старался сделать это как можно более читабельным, но это, конечно, на личный вкус (или в соответствующем руководстве по стилю). max66 сжал это намного больше.std::array
вместо собственного массива кажется бессмысленным осложнением.std::array<const char*, 2>
бесконечно более читабельным, чемconst char**
. Но, опять же, это мой лучший пример читабельности при довольно неясном синтаксисе, вы можете делать с ним все, что вам нравится в вашем собственном коде. Все, что я могу сделать, это дать вам информацию о том, что я считаю читабельным.Это легко сделать с помощью нескольких вспомогательных функций, которые следуют следующей схеме.
Это не сложное выражение, но общий результат тот же.
источник
Я полагаю, вы можете попробовать с индексом и троичным оператором.
Что-то следующее
источник
std::array
(который, во всяком случае, является легким классом), но (так что я думаю, что предпочтительнее принятый ответ) менее читабельно.Следующий код должен сделать свое дело. Пакет параметров раскрывается в списке инициализатора.
источник
args
были конвертируемыми вstd::string
s.С
std::index_sequence
:демонстрация
источник