Есть метод, работающий с очередью пар deque. Нужно, чтобы при определенных входных данных, метод, работал либо с первой частью пары, либо со второй. Пример:
void max3(deque<pair<int, int>> & q, [first or second] ) {
int a = q[0].[first or second];
cout << a << endl;
}
Я бы написал так:
void max3(deque<pair<int, int>> &q, bool use_second)
{
int a = (use_second ? q[0].second : q[0].first);
cout << a << endl;
}
можно ли это реализовать через прямое указание в аргументах, либо first, либо second, без лишних методов и условий?
Тогда можно использовать указатель-на-член-класса (pointer-to-member):
void max3(deque<pair<int, int>> &q, int pair<int, int>::* member)
{
int a = q[0].*member;
cout << a << endl;
}
Пример использования: max3(foo, &pair<int, int>::first)
.
Конкретно для данных пар целочисленного типа, это просто:
void max3(const std::deque<pair<int, int>>& q, bool x )
{
std::cout << q[0].first * x + q[0].second * (!x) << std::endl;
}
P.S. Преимущество аргумента булевского типа в том, что есть возможность передать любой предикат. Ну, и конечно, без проверки нельзя тут обойтись, потому что(по хорошему) в функции нужно провести проверку очереди на пустоту
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь создать полосу прокруткиИспользовал ScrollWindow после него вызываю UpdateWindow, но все равно получается что-то не то
Подскажите, пожалуйста, что получится в каждом варианте и почему
Делаю на Wordpress форму с возможностью добавления нескольких фалов путём создание нескольких заранее определённых инпутов: