Ist das möglich? Das will ich machen, da ich denke das es die konfortablste Art ist, wie man entsprechende Assets lädt. Sprich wenn ich CTexture als T verwende, dann werden intern nur nach Texture Loader gesucht usw.
Oder gibts da ne einfache lösung? Was ich nicht will ist: cman->LoadTexture("meine texture"); Dann muss ich für jeden Content Typ eine eigene Load Methode aufrufen, aber ich hätte das System gern Generisch damit man es auch erweitern kann ^^
Nicht getestet aber sollte so eigentlich nahezu kompilierbar sein. Wichtig ist, dass man bei Spezialisierung einmal den undefinierten Fall hat, im CContentManager mit T und dann die Spezialisierten Fälle ohne template informationen zusätzlich angibt. In dem Beispiel würden alle Möglichkeiten, außer CMesh und CTexture 0 zurück geben.
Die Sache hab ich mal als static definiert, da solche funktionen in der Regel keine Instanz benötigen und dem Factory Pattern entspricht.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Hmm, also es kompiliert irgendwie nicht. Hast ne idee? Fehler:
Error 2 error LNK1169: one or more multiply defined symbols found D:\Development\SFMLTest\GameFramework\Debug\GameFrameworkApp.exe 1 1 GameFrameworkApp
Error 1 error LNK2005: "public: class gf::CTexture2D * __thiscall gf::CContentManager::Load<class gf::CTexture2D>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$Load@VCTexture2D@gf@@@CContentManager@gf@@QAEPAVCTexture2D@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in ContentManager.obj D:\Development\SFMLTest\GameFramework\GameFrameworkApp\TestGame.obj GameFrameworkApp
Fehler kommt erst sobald ich diese Load Methode verwende:
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Pragma gehört nicht zum standard und macht auf einigen compilern probleme und ist in der regel auch nicht so gut wie ifdef. Hatte mal vor ne weile nen artikel gelesen, weswegen ich dann das pragma, was ich zusätzlich zu ifdef drin hatte, entfernte.
Du hast die spezialisierung in die cpp gelegt, dort liegt die falsch, da nun mit hilfe des generischen Load eine implementierung gemacht wird und mit der spezialisierten version, in der cpp er dann bei nutzung dieser zu einem konflikt führt, gibt es ja nun 2 mal.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
ich schreibs hier mal drunter, da meine Edits für gewöhnlich übersehen werden: wir haben *code* tags, bitte nutzt sie: [code=cpp]foobar[ /code] (ohne leerzeichen vor dem / versteht sich )
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Da es ne kniffelige Sache ist, wollte ich nochmal die Endgültige Lösung aufzeigen. Hier ein bisschen Code aus mein Framework, welches template spezialisierung auf Methoden zeigt. Wichtig ist, dass für jede spezialisierung eine definition und declaration existiert und beides in dem Header liegt. Man sollte auch immer den Typen mit vollständigen Namespace für den template parameter angeben, da VSC++ z.B. Amok läuft, wenn man dies nicht Tut. Im Folgendem Code z.B. ist NetService eigentlich von RadonFramework namespace umgeben und man müsste nicht bei den Typen RadonFramework::.... schreiben sondern kann diesen Namespace weg lassen aber wenn es ein Template parameter ist, dann nicht.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.