Ik probeer een aantal operators te overloaden zodat ze werken met de std::vector. Nu wilde ik dit generaliseren door templates te gebruiken.
Ik heb een klein voorbeeldje uitgewerkt:
Ik krijg een foutmelding: no match for 'operator+=' in 'vec2+= "extra"'
Als ik een extra typename gebruik dan werkt het wel:
Waarom krijg ik in het eerste geval een foutmelding, maar in het tweede geval niet? Heeft dit te misschien te maken met conversion?
Ik heb een klein voorbeeldje uitgewerkt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template<typename T> std::vector<T> operator+=(std::vector<T>& a, T b) { for(typename std::vector<T>::iterator i = a.begin(); i!=a.end(); ++i) { (*i) += b; } return a; } std::vector<std::string> vec1; vec1.push_back("hoi"); vec1.push_back("test"); vec1.push_back("bla"); std::vector<std::string> vec2(vec1); vec1 += std::string("extra"); // dit werkt prima vec2 += "extra"; // dit werkt niet. |
Ik krijg een foutmelding: no match for 'operator+=' in 'vec2+= "extra"'
Als ik een extra typename gebruik dan werkt het wel:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template<typename T1, typename T2> std::vector<T> operator+=(std::vector<T1>& a, T2 b) { for(typename std::vector<T1>::iterator i = a.begin(); i!=a.end(); ++i) { (*i) += b; } return a; } std::vector<std::string> vec1; vec1.push_back("hoi"); vec1.push_back("test"); vec1.push_back("bla"); std::vector<std::string> vec2(vec1); vec1 += std::string("extra"); // dit werkt prima vec2 += "extra"; // dit werkt nu wel prima |
Waarom krijg ik in het eerste geval een foutmelding, maar in het tweede geval niet? Heeft dit te misschien te maken met conversion?
PC load letter? What the fuck does that mean?