zmienne globalne w przestrzeniach nazw

0

Witam.
Wyczytałem postulat odnośnie przyszłości przestrzeni nazw:
"Zamiast zewnętrznych zmiennych globalnych należy stosować zmienne w nazwanych przestrzeniach nazw."

Moje pytanie brzmi, jak to zrealizować?
Mając plik1.cpp i w nim jakis namespace ze zmienna

namespace przyklad { int liczba; } 

Chcąc użyć zmiennej

przyklad::liczba 

w pliku plik2.cpp muszę zaincludować jakoś tą przestrzeń. Potrzebuję wtedy headera. Z kolei w headerach (z tego co mi wiadomo) nie powinno deklarować się zmiennych (oprócz const).
Jak więc rozwiązać problem zmiennych globalnych w przestrzeniach nazw?

Jedyne rozwiązanie jakie mi przychodzi do głowy, to:

//plik1.h
namespace przyklad {
 extern int liczba;
}
//plik1.cpp
#include "plik1.h"
namespace przyklad {
   int liczba;
}
//plik2.cpp
#include <iostream>
#include "plik1.h"
int main()
{
std::cout << przyklad::liczba;
return 0;
}

Być może jednak istnieje rozwiązanie inne, bez konieczności tworzenia pliku nagłówkowego?

2

Trochę tego nie rozumiem bo jak utworzysz plik1.cpp to dla niego tak czy inaczej wypadałoby mieć plik1.h a wtedy w plik1.cpp nie musisz powtarzać namespace tylko dajesz np

//plik1.h
namespace space {
 extern int liczba;
}
//plik1.cpp
#include "plik1.h"
int space::liczba = 100;

Dodam jeszcze że generalnie lepiej byłoby nie używać takich konstrukcji ( unikaj zmiennych globalnych ) i że bez pliku nagłówkowego się nie obędzie bo w końcu gdzieś ten namespace ze zmienną extern musisz zadeklarować

1 użytkowników online, w tym zalogowanych: 0, gości: 1