Передать параметр функции непосредственно в переменную класса - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть класс lazy_segment_tree. Это текущий конструктор

template<typename T>
struct lazy_segment_tree{
    int n;
    int H;
    T base;
    vector<T> segtree;
    vector<T> lazytree;
    T (*join)(T,T);
    T (*assign)(int,T,T);
    lazy_segment_tree(vector<T> &seq, T (*merge)(T,T), T (*create)(int, T,T), T defvalue){
        join=merge;
        assign=create;
        base=defvalue;
        n=seq.size();
    }
};

Не могу ли я напрямую сделать параметры построения go для значений в переменной класса?

1 Ответ

1 голос
/ 13 апреля 2020

Я не уверен на 100%, что вы подразумеваете под «напрямую».

Но в этом случае вы должны использовать список инициализатора для инициализации переменных-членов. Подробнее о списках инициализаторов здесь .

Применительно к вашему коду конструктор теперь будет выглядеть следующим образом:

lazy_segment_tree(vector<T> &seq, T (*merge)(T,T), T (*create)(int, T,T), T defvalue)
    : join(merge)
    , assign(create)
    , base(defvalue)
    , n(seq.size())
{}

В исходном коде все члены являются первыми создается по умолчанию во время инициализации класса. Затем вызывается тело конструктора, где вы используете '=', чтобы скопировать, назначить параметры конструктора.

Когда используется список инициализатора, члены создаются напрямую с указанными параметрами.

В зависимости на то, что T может быть, это может или не может иметь реальное значение. Тем не менее списки инициализаторов являются стандартным способом инициализации членов класса, и вы должны использовать его, если это возможно.

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