Stil: spezialiserung von templates oder benutzung von traits?
-
ich habe eine klasse,die 3 verschiedene arten von texturen verwalten können soll.
diese texturen haben (leider) verschiedene funktionen welche sie erstellen, ich müsste also den ctor für jee Version umschreiben.
als weitere änderung brauchen halt die get-methoden noch andere Rückgabewerte, der größte Teil der Klasse bleibt aber gleichIch frage mich, ob ich einfach für jede version eine template spezialisierung benutzen soll, oder ob ich die traits benutze, damit ich nicht alle funktionen umschreiben muss.
die frage ist nun, was schönerer stil wäre,da ich so das gefühl hab, dass das ganze in mehrfachvererbung enden wird, da ich die Klasse schon von einem Interface ableite...
-
otze schrieb:
Ich frage mich, ob ich einfach für jede version eine template spezialisierung benutzen soll, oder ob ich die traits benutze, damit ich nicht alle funktionen umschreiben muss.
oder policies?
-
kenn ich nicht
//edit achso..google bildet^^
ne, ich bemerke bei policies und traits ein fundamentales problem:
nehmen wir mal an, 75% der funktionen meiner klasse müssen nicht geändert werden, die klasse hat also ein paar private members, mit wichtigen informationen über die Klasse.
nun ist es aber so, dass die restlichen 25% die ich ja fremd-einbinden will auch zugriff auf diese wichtigen informationen haben sollen, was bedeuten würde, dass ich ein problem mit der positionierung der variablen und ihrer werte hätte...
-
http://www.informit.com/articles/article.asp?p=167842&seqNum=6
Google hilft
Edit: omg, jetzt hast du freiwillig selbst gegoogelt :p:rolling_eyes:
MfG SideWinder
-
wir haben beide sogar die selbe seite rausgesucht
-
otze schrieb:
wir haben beide sogar die selbe seite rausgesucht
Naja in dem Fall gut möglich, ich hab das erst beste genommen was unter "C++ policies" für dich zu finden war.
MfG SideWinder
-
otze schrieb:
nehmen wir mal an, 75% der funktionen meiner klasse müssen nicht geändert werden, die klasse hat also ein paar private members, mit wichtigen informationen über die Klasse.
nun ist es aber so, dass die restlichen 25% die ich ja fremd-einbinden will auch zugriff auf diese wichtigen informationen haben sollen, was bedeuten würde, dass ich ein problem mit der positionierung der variablen und ihrer werte hätte...hä?
die klasse mt den 75 member macht doch alles sinnvolle und so. und sie ruft immer, wenn sie mal mag, ne funktion der policy-klasse mit den 25 members auf. braucht die policy-funktion in der tat aber mal 50 members, um sinnvoll zu lafen, werden ihr halt beim funktionsaufruf noch 25 members gezeigt (übergeben).
-
habs nu so gelöst:
template<class TextureType> class ITexture{ public: virtual ~ITexture()=0; virtual int Release()=0; virtual void AddRef()=0; virtual int GetRef()const=0; virtual TextureType* const getTexture()const=0; };
template<class TextureType,class CreateTexture> class Texture:public ITexture<TextureType>,public CreateTexture{ private: Virtual::Allocator<void> Allocator; int Reference; TextureType Texture; public: Texture(int TextureSize,char* data,int MipLevels):Allocator(TextureSize),Reference(0){ CreateTexture::Create(std::copy(data,data+TextureSize,Allocator.getPointer()),&Texture,MipLevels); } int Release(){ --Reference; Texture->Release(); return Reference; } void AddRef(){ ++Reference; Texture->AddRef(); } int getRef()const{ return Reference; } TextureType* const getTexture()const{ return &Texture; } };
kann/sollte man das so machen?