3
我正在試圖創建一個模板函數,該函數重載了指針和非指針。我這樣做,它的工作。爲容器內容納的指針和非指針類型數據創建模板函數重載
template<class D, class V>
bool Same(D d, V v){ return d == v; }
template<class D, class V>
bool Same(D* d, V v) { return *d==v;}
現在我想擴展它使得模板容器是paramater並且必須有一個版本與指針和其他與非指針容器中的容器。我無法弄清楚。我試過這個,但它不起作用。
template< template<class> class Container, class Data, class Value>
bool func(Container<Data> &c, Value v)
{
return c[0] == v;
}
template< template<class> class Container, class Data, class Value>
bool func(Container<Data*> &c, Value v)
{
return *c[0] == v;
}
錯誤c2040表示int *與int的間接級別不同,並指向第一個函數。
我怎樣才能使它工作?
導出代碼
template<class D>
class Vec
{
std::vector<D> m_vec;
public:
void push_back(D d) { m_vec.push_back(d); }
D operator[](int i) { return m_vec[i]; }
};
void test_template()
{
Same<int, int>(2,3);
Info i = {4};
Same<Info, int>(i, 2);
Info ii = {2 };
Info *pi = ⅈ
Same<Info, int>(pi, 2);
Vec<int> iv;
iv.push_back(3);
func<Vec, int, int>(iv, 3);
Vec<int*> pv;
pv.push_back(new int(3));
func<Vec, int*, int>(pv, 3);
}
+1或者只是省略顯式模板參數。 – dyp
糟糕。大!謝謝。 – Dirt