Qual é o idioma do C ++ equivalente ao bloco estático de Java?
Eu tenho uma classe com alguns membros estáticos, e eu quero executar algum código para inicializá-los (suponha que este código não pode ser convertido em uma expressão simples). Em Java, eu apenas faria
class MyClass {
static int myDatum;
static {
/* do some computation which sets myDatum */
}
}
A menos que eu esteja enganado, o C ++ não permite esses blocos de código estáticos, certo? O que eu deveria estar fazendo em vez disso?
Eu gostaria de solução para as duas opções a seguir:
A inicialização acontece quando o processo é carregado (ou quando a DLL com essa classe é carregada).A inicialização acontece quando a classe é instanciada pela primeira vez.Para a segunda opção, eu estava pensando em:
class StaticInitialized {
static bool staticsInitialized = false;
virtual void initializeStatics();
StaticInitialized() {
if (!staticsInitialized) {
initializeStatics();
staticsInitialized = true;
}
}
};
class MyClass : private StaticInitialized {
static int myDatum;
void initializeStatics() {
/* computation which sets myDatum */
}
};
mas isso não é possível, já que o C ++ (no momento?) não permite a inicialização de membros estáticos não-constantes. Mas, pelo menos isso reduz o problema de um bloco estático àquele da inicialização estática pela expressão ...