Bonjour,
Si vous cherchez une classe permettant de mesurer le temps d’exécution d'un bout de code, j'ai créé une classe benchmark ici : https://github.com/katian/dev_cpp
Bien sûr, vos remarques sont les bienvenues :)
Version imprimable
Bonjour,
Si vous cherchez une classe permettant de mesurer le temps d’exécution d'un bout de code, j'ai créé une classe benchmark ici : https://github.com/katian/dev_cpp
Bien sûr, vos remarques sont les bienvenues :)
Pourquoi une dépendance à la SFML alors qu'il existe std::chrono ?
Bonjour Katian.
SFML
Je trouve dommage que vous ayez choisi de prendre la SFML comme dépendance de votre classe. Le C++ propose des outils comme std::chrono qui vous permettrait de vous extraire de cette dépendance. Elle n'a peut-être pas d'importance pour vous, mais sachez que personne n'installera la SFML juste pour mesurer le temps d'exécution d'un de ses bouts de code.
L'APICode:#include <SFML/System/Clock.hpp> // SAD :(
Voici ce que tout développeur lira en premier quand il s'intéressera à votre travail :
Il s'agit de l'API : l'interface de votre classe Benchmark. J'ai deux remarques majeures :Code:
1
2
3
4
5
6
7 class Benchmark final : private sf::NonCopyable { public: Benchmark (const std::string& text_, int delay_); bool keep_running ();
- Comment je me sers de cette classe ?
- Mais en fait, elle fait quoi au juste ?
Ce bout de code n'est pas du tout explicite. L'exemple cité en commentaire n'est ni une documentation, ni une spécification : est-ce la seule façon de se servir de Benchmark ? D'ailleurs dans cet exemple, nulle part vous n'appelez une fonction à bencher ...
En conclusion, je n'ai aucune idée de l'usage que je dois en faire. Voila comment je m'attendrais utiliser un banc d'essai :
Notes en vracCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <iostream> #include <vector> #include <algorithm> #include "Benchmark.h" int function_to_bench(double input); int main() { std::vector<double> inputs(1'000'000); std::generate(begin(inputs), end(inputs), [n=0.0] () mutable { n+=1.0; return n; }); Benchmark bench{function_to_bench, inputs}; // eventuellement, bench.start(); std::cout << bench.elapsed_time() << "\n"; }
- Vous ne respectez pas la règle de 5 : si vous définissez un constructeur, destructeur ou opérateur d'assignation, vous devez tous les définir.
- Votre classe crache dans la sortie standard, ce n'est ni nécessaire ni attendu.
- Une fois les remarques ci-dessus prises en compte, je pourrais vous suggérer quelques fonctionnalités suplémentaires.
J'espère que ces commentaires vous permettront d'améliorer la qualité de votre API, je serai heureux de la voir progresser :)