Использование оператора ()

У меня мало вопросов по поводу () оператор. Пожалуйста, помогите мне получить ясную идею.

  1. Какая польза от () оператор (() перегрузка оператора).
  2. В каких ситуациях его следует использовать.
  3. Каковы практические примеры () использование оператора (в каких ситуациях это полезно, удобно или подходит для использования () оператор).

0

Решение

Он в основном используется в объектах функций для имитации вызовов функций.

#include <iostream>

struct Functor
{
void operator()() {
std::cout << "lol\n";
}
};

int main()
{
Functor f;
f();  // output: "lol"}

Живая демо

Придуманный пример, да, но это становится более сложным с аргументами конструктора и когда, скажем, сохраняется этот функтор для использования в алгоритме. Это очень распространено в стандартной библиотеке C ++.


Ты не иметь использовать это таким образом; Другой пример — симуляция доступа к многомерным массивам:

#include <vector>

template<typename T>
struct Matrix
{
Matrix(unsigned m, unsigned n)
: m(m), n(n), vs(m*n) {}

T& operator()(unsigned i, unsigned j)
{
return vs[i + m * j];
}

private:
unsigned m;
unsigned n;
std::vector<T> vs;

};

/**
*       _~
*    _~ )_)_~
*    )_))_))_)
*    _!__!__!_
*    \______t/
*  ~~~~~~~~~~~~~
*/
int main()
{
const unsigned int WIDTH = 3;
const unsigned int HEIGHT = 3;

Matrix<long> m(WIDTH, HEIGHT);
m(1,1) = 42;
}

Этот полезен, потому что operator[] может принимать только один параметр (хотя этот параметр может быть списком инициализатора, который является обходным путем).

5

Другие решения

Оператор () используется для создания так называемого объекта функции, называемого «функтор»

Есть несколько очень интересных вещей, которые позволяет сделать наличие функционального объекта, включая передачу функционального объекта в качестве параметра.

Ссылка, которую я публикую ниже, является видео из класса, который я посещал, где профессор говорит о функторах. Я нахожу это очень полезным. (Примечание: vid также говорит о шаблонах классов)

Функторы и шаблоны

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector