Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Aurora  (Lu 5136 fois)

0 Membres et 1 Invité sur ce sujet

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6287
  • Thor Developer
    • Voir le profil
    • Bromeon
Aurora
« le: Mars 25, 2012, 12:07:14 pm »
[Ouvert de nouveau a cause de l'échange de forum]
[Corrigé les fautes de l'exemple Dispatcher]


Aurora

Bien que ce projet et SFML ne sont pas directement liés, je pense que quelques gens peuvent le trouver intéressant. Originalement une partie de Thor, Aurora est maintenant une bibliothèque autonome qui offre des fonctionnalités diverses pour C++.

Une exemple d'un smart pointer:
#include <Aurora/SmartPtr/CopiedPtr.hpp>

namespace sf { class Drawable; } // Forward declaration is enough

struct GameObject
{
        aur::CopiedPtr<sf::Drawable> drawable;
};

#include <SFML/Graphics.hpp>

int main()
{
        GameObject a, b, c;
        a.drawable.reset(new sf::RectangleShape);
        b.drawable.reset(new sf::Sprite); // different derivates
        c = a; // performs a deep copy
} // deletes everything correctly
sf::Drawable est une classe de base abstraite, mais on peut la mettre dans un smart-pointer. En conséquence, c'est possible de faire des copies comme d'habitude -- l'objet derivé (sf::RectangleShape) est copié correctment. Tout ça se passe sans un constructeur par recopie, un opérateur d'affectation, ou une fonction clone() virtuelle.

Un autre exemple: Les dispatchers qui sont capable de choisir la fonction correcte d'une nombre de candidates, tandis que les argument soyent seulement connu pendant l'éxecution du programme. Comme ça, on peut utiliser des classes de base (comme Object dans l'exemple), mais l'interaction entre deux objets peut être réalisée avec toute l'information des types. Il ne faut pas différentier des cas.
#include <Aurora/Dispatch.hpp>
#include <iostream>

// Example class hierarchy
class Object { public: virtual ~Object() {} };
class Asteroid : public Object {};
class Ship     : public Object {};

// Functions for collision with different argument types
void collision(Asteroid*, Asteroid*)    { std::cout << "Asteroid-Asteroid\n"; }
void collision(Asteroid*, Ship*)        { std::cout << "Asteroid-Ship\n";     }
void collision(Ship*,     Ship*)        { std::cout << "Ship-Ship\n";         }

int main()
{
    // Create dispatcher and register functions
    aur::DoubleDispatcher<Object*> dispatcher;
    dispatcher.add<Asteroid, Asteroid>(&collision);
    dispatcher.add<Asteroid, Ship>    (&collision);
    dispatcher.add<Ship,     Ship>    (&collision);

    // Base class pointers (no static type information about derived classes)
    Object* a = new Asteroid;
    Object* s = new Ship;

    // Invoke functions, let dispatcher choose the correct overload
    dispatcher.call(a, s); // Output: "Asteroid-Ship"
    dispatcher.call(a, a); // Output: "Asteroid-Asteroid"
    dispatcher.call(s, s); // Output: "Ship-Ship"
   
    delete a;
    delete s;
}

Aurora utilise la license zlib/libpng. Parce qu'il s'agit d'une bibliothèque header-only, vous n'avez pas besoin de compiler ou lier quelque chose.

Links
Page web du projet Aurora
GitHub

P.S. Excusez les expressions spécifiques de C++, je n'en connais pas toutes en français ;)
« Modifié: Mars 25, 2012, 12:09:11 pm par Nexus »
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Bad dream

  • Newbie
  • *
  • Messages: 6
    • Live Messenger (MSN) - thomas199512@live.fr
    • Voir le profil
Re : Aurora
« Réponse #1 le: Mars 25, 2012, 10:35:12 pm »
Bonjour,
Pour information Aurora est aussi le nom du navigateur web instable Mozilla Firefox. Je sais pas si ça va t'inciter à changer le nom de la bibliothèque... Enfin, c'est juste pour que tu ne sois pas surpris quand tu le verras par toi même.

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6287
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Aurora
« Réponse #2 le: Mars 26, 2012, 06:45:33 pm »
Merci. Oui, je sais qu'Aurora peut signifier beaucoup des autres choses, pour moi ça suffit si c'est unique dans sa domaine et si on peut le trouver (pour savoir cela, il faut attendre quelque temps). Mais peut-être Aurora n'est vraiment pas le meilleur nom... ???
« Modifié: Mars 26, 2012, 06:48:01 pm par Nexus »
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Bad dream

  • Newbie
  • *
  • Messages: 6
    • Live Messenger (MSN) - thomas199512@live.fr
    • Voir le profil
Re : Aurora
« Réponse #3 le: Mars 26, 2012, 07:32:09 pm »
Non, non, je ne voulais surtout pas dire ça... Aurora est un nom bien choisi, et j'espère que tu l'as choisi par toi même, et que tu en est fier de ce fait.  ;)