Partage
  • Partager sur Facebook
  • Partager sur Twitter

constructeur de déplacement

erreur à la compilation

Sujet résolu
12 août 2018 à 2:13:13

Ahhhhhhhhhh

Non!!!

Plus haut je t'ai donné une solution à base de plusieurs containers le tout templatisé.

template<typename T>
class MonoContainer {
    void append(T t);
    void process() {
        for(T &t : m_container) {
            process(t);
        }
    }
    std::vector<T> m_container;
};
 
template<typename ...Ts>
class Container : public MonoContainer<Ts>... {
public:
    using MonoContainer<Ts>::append...;
 
    void process() {
        (MonoContainer<Ts>::process())...;
    }
};
 
void process(ShapeA&);
void process(ShapeB&);
 
int main() {
    Container<ShapeA, ShapeB> container;
    container.append(ShapeA{});
    container.append(ShapeB{});
    container.process(); // Appelle automatique process(ShapeA) puis ShapeB
    return 0;
}

Je te laisse complexifier le code pour l'intersection, mais tu as l'idées.

Tu sais que tu vas avoir un nombre de formes "limitées" : les quadriques, puis les modèles à bases de triangles. Pour optimiser le calcul, chaque quadrique a son propre type qui définit son équation (l'équation d'un elipsoide est plus simple qu'une quadrique générale, c'est pour ça que j'en fais plusieurs types différents ;) ).

A la suite de ça, tu as réellement un contenaire différent pour chacun des types, et tu n'as pas de fragmentation de la mémoire :). Et surtout, étant donné qu'il n'y a pas de groupes comme des Widget "à la" Qt, il y a très peu de chances d'avoir des centaines de container vide ;)

-
Edité par Qnope 12 août 2018 à 3:13:11

  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !