Permalänk

[C++] Template funktion

Vill göra en template funktion innuti en vanlig klass enligt exemplet nedan men det verkar inte kompilatorn tycka om.

Class CTemplateClass { public: template<class T> void foo( T bar ) {}; }; int main() { CTemplateClass temp; temp.foo<EnKlass>( EttObject ); return 0; }

Får följande fel:
error C2275: 'EnKlass' : illegal use of this type as an expression

Visa signatur

And on the seventh day, god stepped back and said: "There is my creation, perfect in every way... oh, dammit I left pot all over the place. Now they'll think I want them to smoke it... Now I have to create republicans." - Bill Hicks

Permalänk
Medlem

Vilken kompilator? msvc6 gillar det inte vill jag minnas.. msvc7.x skall svälja det utan problem.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk

Använder msvc6. Finns det ingen "workaround" på något vis då?

Visa signatur

And on the seventh day, god stepped back and said: "There is my creation, perfect in every way... oh, dammit I left pot all over the place. Now they'll think I want them to smoke it... Now I have to create republicans." - Bill Hicks

Permalänk
Medlem

Räcker det inte med temp.foo( EttObject )? Template-funktioner skapas så vitt jag vet vid behov och man behöver inte explicit säga vilken template man vill ha.

Permalänk
Citat:

Ursprungligen inskrivet av Karlsson
Räcker det inte med temp.foo( EttObject )? Template-funktioner skapas så vitt jag vet vid behov och man behöver inte explicit säga vilken template man vill ha.

Verkar bannemig som du har rätt! Det tackar vi så mycket för

Visa signatur

And on the seventh day, god stepped back and said: "There is my creation, perfect in every way... oh, dammit I left pot all over the place. Now they'll think I want them to smoke it... Now I have to create republicans." - Bill Hicks

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Tangerine
Verkar bannemig som du har rätt! Det tackar vi så mycket för

Det är bara när du tex anropar en funktion:

template<typename T> void f(T t1, T t2); f(long(), int()); //funkar inte, kompilatorn vet inte vilken typ det ska vara på T f<int>(long(), int()); //funkar, första värdet omvandlas till int