157 votes

Comment implémenter les fonctions membres d'une classe statique dans un fichier *.cpp ?

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 ?

188voto

CromTheDestroyer Points 1302

Elle l'est.

test.hpp :

class A {
public:
    static int a(int i);
};

test.cpp :

#include <iostream>
#include "test.hpp"

int A::a(int i) {
    return i + 2;
}

using namespace std;
int main() {
    cout << A::a(4) << endl;
}

Ils ne sont pas toujours en ligne, non, mais le compilateur peut les faire.

53voto

paulcam Points 364

Essayez ça :

header.hxx :

class CFoo
{
public: 
    static bool IsThisThingOn();
};

class.cxx :

#include "header.hxx"
bool CFoo::IsThisThingOn() // note: no static keyword here
{
    return true;
}

10voto

Rizz Rocks Points 1

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 ?

6voto

Mr. Suryaa Jha Points 379

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
}

Très important

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

2voto

cppcoder Points 375

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.com

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.

Powered by:

X