C ++ интересная функция определить - PullRequest
3 голосов
/ 16 октября 2010

Я изучил код RDcode. И я сталкиваюсь с определенной функцией, и я не понимаю. Можете ли вы помочь мне этот код.

template <typename T>
   class argless {
   public:
     argless(const T& c) : container(c) {}; // i dont understant this line.
     bool operator() (unsigned int v1,unsigned int v2){
       return container[v1]<container[v2];
     }
     const T &container;
   };

Ответы [ 6 ]

8 голосов
/ 16 октября 2010

Это конструктор, который берет ссылку на const T и инициализирует переменную-член container вместе с ней.

3 голосов
/ 16 октября 2010

Это конструктор , который использует список инициализаторов .

3 голосов
/ 16 октября 2010

Он использует синтаксис инициализатора для хранения контейнера, переданного по ссылке const, в контейнер переменной-члена.Он должен использовать синтаксис инициализатора, потому что переменная-член контейнера является ссылкой (она должна быть инициализирована через список инициализатора).

0 голосов
/ 17 октября 2010

Используется, чтобы оператор () действовал как оператор <для компонентов другого контейнера.Вы могли бы использовать его для сортировки одного контейнера на основе содержимого другого, где первый содержит индексы для второго.В этом случае вы получите представление о том, как выглядит отсортированный контейнер, без необходимости его сортировки - полезная вещь, если перемещение элементов обходится дорого или невозможно, например строки.

0 голосов
/ 16 октября 2010

Это синтаксис для 2 типов вещей:

1) Инициализация константной переменной.

2) Вызов базового класса конструктора.

0 голосов
/ 16 октября 2010

Это шаблон класса для функтора, который позволяет сравнивать произвольные элементы в индексируемом контейнере, т.е. тот, который реализует memberOfT& operator[] (unsigned int).

Кроме того, memberOfT должен поддерживать bool operator<(const memberOfT&, const memberOfT&), иначе operator(), который делает его функтором, не будет компилироваться.

Строка, о которой вы спрашиваете, просто делает контейнер ввода класса T доступным для других членов класса. Поскольку это хранится в argless в качестве ссылки, важно, чтобы контейнер источника, используемый в конструкторе argless, оставался в области действия на время использования argless.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...