Le partage des variables statiques dans des fichiers: namespace vs classe

Il ya beaucoup de questions à propos de statique vs mondiale ici, mais je pense que ma question est un peu différente.

Je veux savoir si il existe un moyen de partager une variable placé dans un espace de noms à travers les fichiers de la façon dont les variables statiques dans une classe peut.

Par exemple, j'ai codé ceci:

//Foo.h
class Foo
{
  public:
  static int code;
  static int times_two(int in_);
};

namespace bar
{
  static int kode;
}

-

//Foo.cpp
int Foo::code = 0;

int Foo::times_two(int in_)
{
  bar::kode++;
  code++;
  return 2*in_;
}

-

//main.cpp
int main()
{
  cout << "Foo::code = " << Foo::code << endl;

  for(int i=2; i < 6; i++)
  {
    cout << "2 x " << i << " = " << Foo::times_two(i) << endl;
    cout << "Foo::code = " << Foo::code << endl;
    cout << "bar::kode = " << bar::kode << endl;

    if(i == 3)
    {
      bar::kode++;
    }
  }
}

Tout ce qui a abouti à ce code et kode:

Foo::code = 1,2,3,4
bar::kode = 0,0,1,1

Une fois de plus, il est un moyen de partager une variable placé dans un espace de noms à travers les fichiers de la façon dont les variables statiques dans une classe peuvent? La raison pour laquelle je demande, parce que je pensais que je serais en mesure de protéger moi-même à partir de confliciting des variables globales à l'aide de :: la notation, et viens d'apprendre que je ne pouvais pas. Et comme tout se qui ne respectent pas programmeur, je crois que je me suis fais mal.

static est probablement le plus surchargé de mots clés en C++. Il signifie quelque chose de différent dans ces deux contextes.
... et dans ce cas particulier, tout le contraire de ce que vous voulez.

OriginalL'auteur Morpork | 2012-05-10