Как мне упростить этот шаблонный векторный цикл инициализации, используя лямбда-выражения или преобразование STL? - PullRequest
0 голосов
/ 17 апреля 2010

Как мне упростить этот шаблонный векторный цикл инициализации, используя лямбда-выражения или какое-то преобразование STL?

template<typename T>
template<typename... Args>
void InitToRandomValues(vector<T>* retval, int n, RNG& rng, Args const&... args) {
    retval->resize(n);
    for (auto it = retval->begin(); it != retval->end(); ++it) {
        typename T::CPDDist cpd(rng, args...);
        *it = T(cpd);
    }
}

1 Ответ

0 голосов
/ 17 апреля 2010

Я думаю, что это будет работать:

template<typename T>
template<typename... Args>
void InitToRandomValues(vector<T>* retval, int n, RNG& rng, Args const&... args) {
    retval->resize(n);
    std::generate(retval->begin(), retval->end(), [] -> T() {
        typename T::CPDDist cpd(rng, args...);
        return T(cpd); });
}

Хотя это не слишком упрощение.

...