(C ++) Передача указателя в шаблон - PullRequest
2 голосов
/ 22 октября 2011

У меня есть два указателя. p1. p2.
p1 и p2 оба указывают на разные классы.
У классов есть несколько похожих имен методов,
и я хотел бы вызвать функцию шаблона дважды, чтобы избежать повторения кода.
Вот моя функция:

template <class T>
void Function(vector<T> & list, T* item, const string & itemName)

см. Этот средний параметр, "элемент" ... так должна выглядеть моя подпись, если я хочу, чтобы элемент был изменен?

.. или я должен передать его как
T * & item

.. или я должен передать это как
T ** пункт

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

Как мне вызвать эту функцию, используя один из моих указателей?
что-то о кастинге ?? Я перепробовал все: \

1 Ответ

2 голосов
/ 22 октября 2011

Вы должны быть в состоянии назвать свой код так:

template <class T>
void Function(std::vector<T> & list, T* item, const std::string & itemName)
{
    list.push_back(T());
    if (item != NULL)
      item->x = 4;
}

struct A
{
    int x;
};
struct B
{
    double x;
};
A a;
B b;
std::vector<A> d;
std::vector<B> i;
Function(d, &a, "foo");
Function(i, &b, "bar");

Обратите внимание, что передача параметра по ссылке и по указателю имеет немного другое значение, например, указатели могут быть NULL, см. Есть ли преимущества передачи по указателю по сравнению с передачей по ссылке в C ++? .

Интересно, желательно ли передавать item по указателю и list по (неконстантной) ссылке.

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