zmienne globalne w przestrzeniach nazw

zmienne globalne w przestrzeniach nazw
LA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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

Kopiuj
namespace przyklad { int liczba; } 

Chcąc użyć zmiennej

Kopiuj
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:

Kopiuj
//plik1.h
namespace przyklad {
 extern int liczba;
}
Kopiuj
//plik1.cpp
#include "plik1.h"
namespace przyklad {
   int liczba;
}
Kopiuj
//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?

EM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 271
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

Kopiuj
//plik1.h
namespace space {
 extern int liczba;
}
Kopiuj
//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ć

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.