Как передать вектор копией и ссылкой на функцию? - PullRequest
0 голосов
/ 29 августа 2011
    int main () {
       vector <int> vectorF;
       functionX <vector<int>&, long> (vectorF, 1L);
    }

    template <typename dataTypeA, 
              typename dataTypeB> dataTypeB functionX (dataTypeA argA, 
                                                       dataTypeB argB)
    {   
    }

Этот код изменяет фактические значения в векторе, если они были изменены в определении функции.

Как передать вектор копией?

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

Просто вызовите функцию как,

functionX (vectorF, 1L);  // ok! explicit function calling isn't needed

Однако, как сторона, которую я не хотел бы упомянуть, создание полной копии vector только для функции не имеет особого смысла. Вы можете просто изменить определение функции на

template <typename dataTypeA, typename dataTypeB>
dataTypeB functionX (const dataTypeA& argA, dataTypeB argB)
{                    ^^^^^^^^^^^^^^^^^ const reference 
}

если вы используете это vector для чтения.

1 голос
/ 29 августа 2011

functionX <vector<int>, long> (vectorF, 1L);

Addind a & после vector<int> сделает dataTypeA ссылкой на вектор. Если вы хотите скопировать в вектор, удалите &

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