2011-10-22 59 views
2

我有兩個指針。 P1。 P2。
p1和p2都指向不同的類。
這些類有一些類似的方法名稱,
我想調用一次模板函數兩次以避免重複的代碼。
這裏是我的功能:(C++)將指針傳入模板

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

看到中間paramater,「項目」 ...是我的簽名應該是什麼樣子,如果我想要的項目改變了嗎?

..或者我應該把它作爲
T * &項目

..或者我應該把它作爲
T **項目

編譯器讓很多事情滑動,但是當我去把所有的東西都打破的時候。

如何使用我的一個指針調用該函數?
關於鑄造的東西?我用盡了一切:\

+0

你想改變指針本身,還是隻改變指向的對象? –

+0

指向對象! –

+1

您的代碼應該按原樣運行。你可以發佈你的完整代碼,看看是否有常量問題或什麼? –

回答

2

你應該能夠打電話給你這樣的代碼:

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,請參見Are there benefits of passing by pointer over passing by reference in C++?

我想知道是否需要通過指針itemlist通過(非const)引用。