Как бы я использовал шаблоны с QVector? - PullRequest
0 голосов
/ 17 ноября 2011

В настоящее время у меня есть это:

void ClassA::aFunction(QVector<ClassB *> items) {
    //stuff
}

Я хотел бы превратить параметр для ClassA :: aFunction в QVector с шаблонами:

template <class T *> class QVector;
void ClassA::aFunction(QVector<T *> items) {
    //stuff
}

Это дает мне синтаксисошибки, так каков правильный способ сделать это?

Редактировать:

У меня есть это сейчас:

classA.h:

template <class T>
class ClassA {
public:
    void myFunction(ClassB *);
}

classA.cpp:

template <class T>
void ClassA<T>::myFunction(ClassB * b) {
    QVector<T *> var = b->myBFunction();
}

classB.h:

template <class T>
class ClassB {
public:
    void myBFunction();
private:
    QVector<T *> myVar;
}

classB.cpp:

template <class T>
QVector<T *> ClassB<T>::myBFunction() {
    return this->myVar;
}

У меня есть синтаксическая ошибка "объявление члена не найдено" с ClassA :: myFunction.У меня также есть ошибка "метод" myBFunction "не может быть решен" в ClassA :: myFunction.Как мне исправить эти две ошибки?

Edit2 Понял это:

classA.h:

class ClassA {
public:
    template <class T> void myFunction(ClassB *);
}

classA.cpp:

template <class T>
void ClassA::myFunction(ClassB * b) {
    QVector<T *> var = b->myBFunction<T>();
}

classB.h:

class ClassB {
public:
    template <class T> void myBFunction();
private:
    template <class T> QVector<T *> myVar;
}

classB.cpp:

template <class T>
QVector<T *> ClassB::myBFunction() {
    return this->myVar;
}

1 Ответ

3 голосов
/ 17 ноября 2011

Почти верно:

template <class T> void ClassA::aFunction(QVector<T *> items)
{
    //stuff
}

Вы должны будете объявить это таким же образом в определении класса:

class ClassA
{
  template <class T> void aFunction(QVector<T*>);
  // ...
};

Кстати, почему вы передаете QVector по значению?

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