передача generi c итератора функции cpp - PullRequest
0 голосов
/ 06 августа 2020

Попытка отправить функцию итератора с использованием шаблона, который может получить любой итератор (из массива, очереди и т. Д. c ..). [в примере я отправляю вектор]

ОШИБКА: строка 15 не компилируется:

ExampleVector <int> vec(values.begin(), values.end())")
template <typename ExampleVectorType>
class ExampleVector //new  class
        {
            template <class InputIterator> // generic iterator
            ExampleVector (InputIterator& first, InputIterator& last) // constructor (do nothing)
            {
            }
        };
int main()
{
    /* Create the values */
    std::vector<int> val{4, 8, 12};
    /* Create the vec */
    ExampleVector <int> vec(val.begin(), val.end());
}

1 Ответ

3 голосов
/ 06 августа 2020

После исправления одной ошибки времени компиляции за другой я получаю этот код:

#include <iostream>
#include <vector>
 
template <typename ExampleVectorType>
class ExampleVector //new  class
        {
            public:
            template <class InputIterator> // generic iterator
            ExampleVector (const InputIterator& first, const InputIterator& last) // constructor (do nothing)
            {
            }
        };
int main()
{
    /* Create the values */
    std::vector<int> val{4, 8, 12};
    /* Create the vec */
    ExampleVector <int> vec(val.begin(), val.end());
}

Ошибки и решения:

  1. values ==> val
  2. отсутствует public: перед конструктором
  3. Вы не можете передать rvalue функции, которая ожидает ссылку lvalue, поэтому я изменил функцию, чтобы получить const ссылки lvalue.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...