Ik zit met een C++ template-probleempje. Nu ben ik nog niet zo'n template-expert, en gebruiken van andermans templates gaat wel vrij aardig, maar zelf schrijven... 
Het idee is dat ik een Vertex class krijg die o.a. een toPoint() methode ondersteunt. Omdat er in mijn geval twee manieren zijn om een toPoint() uit te rekenen, en ik deze methode flexibel, maar wel at compile time wil kunnen kiezen, wil ik de Vertex class templaten.
Dus, stel dat ik een object van Vertex<fixed_tag> aanmaak, dan moet de 'gefixte' toPoint()-variant worden gebruikt, terwijl als ik een Vertex<interval_tag> aanmaak, dan moet er een andere toPoint() worden gebruikt.
Hoe doe ik dit goed? Ik heb tot nu toe:
De bovenstaande code compiled niet (VS.NET), en ik heb al een heleboel varianten hierop geprobeerd, maar ik krijg mijn vinger maar niet achter wat ik fout doe...
Wat doe ik verkeerd?
Thanks.
Het idee is dat ik een Vertex class krijg die o.a. een toPoint() methode ondersteunt. Omdat er in mijn geval twee manieren zijn om een toPoint() uit te rekenen, en ik deze methode flexibel, maar wel at compile time wil kunnen kiezen, wil ik de Vertex class templaten.
Dus, stel dat ik een object van Vertex<fixed_tag> aanmaak, dan moet de 'gefixte' toPoint()-variant worden gebruikt, terwijl als ik een Vertex<interval_tag> aanmaak, dan moet er een andere toPoint() worden gebruikt.
Hoe doe ik dit goed? Ik heb tot nu toe:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| struct fixed_tag{}; struct interval_tag{}; template<class S> class Vertex{ // //Member-vars, constructor e.d. // template<fixed_tag> Point toPoint() const; template<interval_tag> Point toPoint() const; }; //Implementation template<fixed_tag> Point Vertex::toPoint() const{ //Calculate and return fixed point } template<interval_tag> Point Vertex::toPoint() const{ //Calculate and return interval point } |
De bovenstaande code compiled niet (VS.NET), en ik heb al een heleboel varianten hierop geprobeerd, maar ik krijg mijn vinger maar niet achter wat ik fout doe...
Wat doe ik verkeerd?
Thanks.