Specializarea parțială a variabilei și a metodei membre

Am programat o simulare care ar trebui să funcționeze atât pentru 2D, cât și pentru 3D. Acum am obiecte care ar trebui modificate. La 3D suprafața este o matrice bidimensională, în timp ce cu 2D este unidimensională. Folosesc un parametru de șablon pentru a indica care spațiu dimensional folosesc. Dar când eu specializăm tipul matricei mele nu mă pot specializa funcția de modificare deoarece este așteptată în clasa specificată. Și apoi aș fi trebuit să copiez toți membrii în clasa specializată.

template  class SimulationObject {
    void operateOnSurface();
};

template<> class SimulationObject {
    char* surface;
//Declaration of operateOnSurface expected here
};

template<> class SimulationObject {
    char** surface;
// Declaration of operateOnSurface expected here
};

template<> void A::operateOnSurface() {
}

template<> void A::operateOnSurface() {
}

Dar încă vreau să evit să copiez codul pentru 2d și 3d deoarece matricea mea de suprafață și funcția de modificare sunt singurii membri care o specifică. Deci există o altă cale?

0
Cât despre abstractizarea surface o dată? Puteți avea două specializări ale conceptului abstract pe care le utilizează metodele cele mai utilizate.
adăugat autor bluevector, sursa

1 răspunsuri

Dacă aveți acces la Vector2D și Vector3D, puteți adăuga o variabilă static const int; la ambele și accesați-o cu VectorType :: dimensions .

0
adăugat