前のエントリ「忘れないうちにスタティックイニシャライザー」がひどい感じにおかしかったので修正しました。
#includeが>とか使ってなかったから消えてた。あと単純な間違いもあった。
そのついでに、「継承したらどうなるんだろう。」ってのをやってみました。
TestClass.h
template<typename T>
class TestClass {
static int a;
};
template<typename T>
int TestClass<T>::a = 0;
TestA.h
class TestA : public TestClass<int> {
};
TestB.h
class TestB : public TestClass<int> {
};
main.cpp
int main(void) {
TestA::a = 111;
TestB::a = 222;
printf("%d", TestA::a);
return 0;
}
結果
222
というわけで、しっかりスタティックでした。
もしTestClassのaが翻訳単位だとしたら(?)、TestA::aとTestB::aが違う実体をさしてしまうんじゃないかという杞憂。
だいじょうぶ、どっちも唯一の実体TestClass::aを見てました。
以上