Разрешить вызов функции с аргументами в любом порядкеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разрешить вызов функции с аргументами в любом порядке

Сообщение Anonymous »

Рассмотрим следующий код:

Код: Выделить всё

#include 

struct T1 {};

struct T2 {};

struct T3 {};

struct T4 {};

void bar(T1, T2, T3, T4) {
}

template
concept IsT = std::same_as || std::same_as ||
std::same_as || std::same_as;

void foo(IsT auto x1, IsT auto x2, IsT auto x3, IsT auto x4) {
// How to order the types of x1, x2, x3, x4 and call bar(x?, x?, x?, x?)?
}

int main() {
foo(T1{},T2{},T3{},T4{}); // ok
foo(T4{},T3{},T2{},T1{}); // ok
foo(T3{},T2{},T1{},T4{}); // ok
// ...
}
Мое намерение простое:

Пользователь может вызвать foo в любом порядке аргументов, но, наконец, будет вызываться с аргументами в правильном порядке.

Тривиальное решение — использовать грубую силу для разделения 24 случаев, что очевидно утомительно и подвержено ошибкам.
Есть ли способ решения этой проблемы без грубой силы? Я использую C++20.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -any-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»