2011-11-17 44 views
0

目前,我有這樣的:我如何使用QVector模板?

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

我想談談對ClassA的::機能缺失的參數爲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的。在ClassA :: myFunction中,我也有一個錯誤「method」myBFunction'無法解析「。我如何解決這兩個錯誤?

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; 
} 

回答

3

差不多吧:

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

你必須聲明的是,在類定義的一樣:

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

順便說一句,你爲什麼通過價值QVector

+0

感謝它的工作!我應該通過參考傳遞QVector嗎? –

+0

@DiZou:是的,很可能你應該。如果您不修改它,則爲Const-reference。 –

+0

請注意,Qt容器具有寫入時複製語義,因此通過引用來傳遞它們以避免不必要的複製並不是嚴格必要的:http://doc.qt.nokia.com/qq/qq19-containers.html – Gnawme