템플릿을 사용한 클래스별 static 변수의 상속

Tags:

Effective C++에서 보고 감동 받은 방법…

#include “.\test.h”
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <cassert>

using namespace std;

template<typename T>
class StaticForEachClass
{
private:
    static int val;
public:
    static void setVal(int v)
    {
        val = v;
    }

    static int getVal()
    {
        return val;
    }
};

template<typename T>
int StaticForEachClass<T>::val;

class A: public StaticForEachClass<A>
{
};

class B: public StaticForEachClass<B>
{
};

int main()
{
    A::setVal(1);
    cout << “A::getVal(): ” << A::getVal() << endl;

    B::setVal(2);
    cout << “B::getVal(): ” << B::getVal() << endl;

    cout << “A::getVal(): ” << A::getVal() << endl;

    return 0;
}

실행결과

a.getVal(): 1
b.getVal(): 2
a.getVal(): 1
Press any key to continue

자바나 C#에서 이정도로 elegant하게 이 문제를 해결 하려면 어떻게 해야할까.