Форум программистов, компьютерный форум CyberForum.ru

Можно ли как-то передавать в функцию то поле, какое нужно печатать - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Класс для организации обработки целочисленного массива http://www.cyberforum.ru/cpp-beginners/thread1078100.html
всем доброго времени суток помогите бедному студенту просто физически не успеваю решить 2 задачи 2 Написать программу, в которой предусмотреть класс для организации обработки целочисленного массива. Внутри класса реализовать два конструктора: 1-й конструктор должен обеспечивать ввод элементов массива с клавиатуры; 2-й конструктор должен формировать значения элементов массива в задаваемом...
C++ Написать программу для сортировки методом прямых включений латинских букв по алфавиту Здравствуйте! Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту. Сортировка простыми включениями и метод прямых включений это одно и тоже? Есть вот такая программа: #include <iostream> using namespace std; int main(int argc, char* argv) { http://www.cyberforum.ru/cpp-beginners/thread1078095.html
C++ Сортировка методом пузырька
Помогите пожалуйста исправить ошибки. Сортировка пузырьком многомерного массива. #include "stdafx.h" #include <stdlib.h> #include <iostream> #include <conio.h> using namespace std; int main() {
C++ Опередить произведение элементов в тех строках матрицы, которые не содержат отрицательных элементов
Дана целочисленная квадратная матрица. Опередить: 1) произведение элементов в тех строках, которые не содержат отрицательных элементов. 2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. #include <iostream.h> #include <clocale> int main(void)
C++ Составить программу для отображения http://www.cyberforum.ru/cpp-beginners/thread1078091.html
Составить программу для отображения abc…………. .xyz bc……………xy c………… x mn
C++ Создать программу, которая выводит псевдографические изображение буквы Создать программу, которая выводит псевдографические изображение буквы "Р" и "Д" При каждом последующем выводе буквы выполнить ее масштабирование (увеличение или уменьшение в размере). Использовать вложенные циклы. подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.01.2014, 03:17     Можно ли как-то передавать в функцию то поле, какое нужно печатать
Цитата Сообщение от Arkaniy Посмотреть сообщение
что есть "предикат"
Предикаты- подмножество функторов, в которых тип возвращаемого значения operator() bool. Предикаты используются в алгоритмах сортировок, поиска, а также во всех остальных, имеющих на конце _if. Смысл в том, что объект-функция в случае использования предиката возвращает истину или ложь в зависимости от выполнения необходимого условия. Это либо удовлетворение объектом неких свойств, либо результат сравнения двух объектов по определенному признаку.
http://www.quizful.net/post/functors...dapters-in-STL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
struct A
{
    int a, b;
};
 
struct First // описываем структуру предикат First
{
    // auto - тип значения определяет компилятор, decltype - автоматически определить тип
    // то есть компилятор сам анализирует какой тип имеет возвращаемое значение
    // obj.a и возвращает переменную, имеющую соответствующий идентификатор типа
    auto operator()(const A &obj) -> decltype(obj.a) {return obj.a; }
};
 
struct Second
{
    auto operator()(const A &obj) -> decltype(obj.b) {return obj.b; }
};
 
// в качестве параметра шаблона выступает функция
template <typename Function>
void print(const A &obj, Function fn) // применяем нашу объект-функцию к A
{
    std::cout << fn(obj);
}
 
int main()
{
    A a {1, 2}; // brace initialization
    print(a, First());
    print(a, Second());
}
Добавлено через 1 минуту
Попробую написать на простых типах:
C++
1
2
3
4
5
6
7
8
9
struct First
{
    int operator()(const A &obj) {return obj.a; }
};
 
struct Second
{
    int operator()(const A &obj) {return obj.b; }
};
Думаю так многое проясняется. Осталось только понять работу ключевых слов auto и decltype из С++11.

Добавлено через 59 секунд
Кстати, такой же прием с объект-функцией использует алгоритм for_each
C++
1
2
3
4
5
6
7
8
9
template<class InputIterator, class Function>
  Function for_each(InputIterator first, InputIterator last, Function fn)
{
  while (first!=last) {
    fn (*first);
    ++first;
  }
  return fn;      // or, since C++11: return move(fn);
}
 
Текущее время: 02:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru