Значение конструктора с несколькими парами скобок - PullRequest
8 голосов
/ 01 июня 2019

Я не уверен насчет этого куска кода:

someClass(std::list<std::function<void(std::vector<someType>&)>>(&)(const std::vector<someType>&)) {
    ...
}

Конструктор для someClass, я полагаю, берет ссылку на список функций, каждая из которых будет возвращать voidи взять ссылку на вектор someType.В чем я не уверен, так это в последней паре скобок, (const std::vector<someType>&).Перегружается ли здесь operator() из std::list?

Кроме того, я хотел бы назвать параметр std::list, но мое первоначальное предположение о someClass(std::list<...>(& nameOfList)(...)) не сработало, поскольку я не могу получить доступ к nameOfList.begin(), например.Что бы я здесь делал?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 01 июня 2019

Это отдельная функция.

std::list<
         std::function<
            void(std::vector<someType>&)
         >
> (&)(const std::vector<someType>&)

Это ссылка на функцию, которая принимает в качестве аргумента ссылку на const std::vector из someType и возвращает список std::function с, который принимает ссылку на std::vector из someType и возвращает void.

Пример использования:

#include <vector>
#include <list>
#include <functional>
class someType {};
void func(std::list<std::function<void(std::vector<someType>&)>> (& par)(const std::vector<someType>&)) {
    // some input
    const std::vector<someType> input;
    // the function returns the list
    std::list<std::function<void(std::vector<someType>&)>> res = par(input);
    // we can iterate over the list
    for (auto & i : res) {
        std::vector<someType> other;
        // and call the functions inside
        i(other);
    }
}
6 голосов
/ 01 июня 2019

Параметр конструктора

someClass( std::list<std::function<void(std::vector<someType>&)>>(&)(const std::vector<someType>&)) {

является ссылкой на функцию, которая имеет тип возвращаемого значения std::list<std::function<void(std::vector<someType>&)>> и один параметр типа const std::vector<someType>&

...