Moin zusammen,
Normalerweise kann man ja eine Memberfunktion, die eine const referrence
als parameter bekommt, problemlos mit einem non-const object aufrufen,
da der cast non-const -> const immer möglich ist:
1 | class ClassA
|
2 | {
|
3 | void f(const ClassB& b);
|
4 | }
|
5 | ...
|
6 |
|
7 | ClassA a;
|
8 | ClassB b;
|
9 | a.f(b); //b ist nicht const, macht aber nichts
|
So weit so gut. Wenn ich aber jetzt ein template aus f mache gibts ein
Problem:
1 | class ClassA
|
2 | {
|
3 | template<typename T>
|
4 | void f(T& t) {...};
|
5 | template<>
|
6 | void f(const ClassB& b) {...};
|
7 | }
|
8 | ...
|
9 |
|
10 | ClassA a;
|
11 | ClassB b;
|
12 | a.f(b); //b ist nicht const, und deswegen funktioniert die spezialisierung nicht :-/
|
Jetzt wird die Funktion für ClassB plötzlich nicht mehr aufgerufen,
sondern die generische. So weit ich weiß wird doch eigentlich immer die
am weitesten spezialisiere Funktion, die auf den übergebenen Typ passt,
aufgerufen. Und passen tut es, denn ohne template gehts ja auch.
Mach ich irgendetwas falsch? Oder muss ich jetzt echt für "ClassB&" und
"const ClassB&" seperate spezialisierungen machen? Oder gibts nen
besseren Weg?