Aquí hay muchas preguntas sobre estática vs global, pero creo que mi pregunta es un poco diferente.Compartiendo variables estáticas entre archivos: espacio de nombres vs clase
Quiero saber si hay una manera de compartir una variable colocada en un espacio de nombres en los archivos de la misma manera que las variables estáticas en una clase.
Por ejemplo, he codificado esto:
//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++;
}
}
}
Todo lo que produjo este código y para Kode:
Foo::code = 1,2,3,4
bar::kode = 0,0,1,1
Una vez más, ¿hay alguna manera de compartir una variable colocada en un espacio de nombres en los archivos de la misma forma que las variables estáticas en una clase? La razón por la que pregunto es porque pensé que sería capaz de protegerme de variables globales conflictivas usando :: notación, y descubrí que no podía. Y como cualquier programador que no respete a nadie, creo que lo estoy haciendo mal.
'static' es probablemente la única palabra clave más sobrecargada en C++. Significa algo diferente en ambos contextos. – Flexo
... y en este caso particular, justo lo contrario de lo que desea. –