Est-il possible de mettre en œuvre static
fonctions membres de la classe dans le fichier *.cpp au lieu de le faire dans le fichier d'en-tête ?
Est-ce que tous les static
fonctions toujours inline
?
Est-il possible de mettre en œuvre static
fonctions membres de la classe dans le fichier *.cpp au lieu de le faire dans le fichier d'en-tête ?
Est-ce que tous les static
fonctions toujours inline
?
helper.hxx
class helper
{
public:
static void fn1 ()
{ /* defined in header itself */ }
/* fn2 defined in src file helper.cxx */
static void fn2();
};
helper.cxx
#include "helper.hxx"
void helper::fn2()
{
/* fn2 defined in helper.cxx */
/* do something */
}
A.cxx
#include "helper.hxx"
A::foo() {
helper::fn1();
helper::fn2();
}
Pour en savoir plus sur la façon dont c++ gère les fonctions statiques, visitez le site : Les fonctions membres statiques en c++ sont-elles copiées dans plusieurs unités de traduction ?
Dans votre fichier d'en-tête, dites foo.h
class Foo{
public:
static void someFunction(params..);
// other stuff
}
Dans votre fichier d'implémentation, dites foo.cpp
#include "foo.h"
void Foo::someFunction(params..){
// Implementation of someFunction
}
Veillez simplement à ne pas utiliser le mot clé static dans la signature de votre méthode lorsque vous implémentez la fonction static dans votre fichier d'implémentation.
Bonne chance
Oui, vous pouvez définir des fonctions membres statiques dans le fichier *.cpp. Si vous les définissez dans l'en-tête, le compilateur les traitera par défaut comme inline. Cependant, cela ne signifie pas que des copies séparées de la fonction membre statique existeront dans l'exécutable. Veuillez suivre ce post pour en savoir plus à ce sujet : Les fonctions membres statiques en c++ sont-elles copiées dans plusieurs unités de traduction ?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.