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

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하게 이 문제를 해결 하려면 어떻게 해야할까.

Similar Posts:

Comments 2

  1. 민구 wrote:

    음.. A::setVal() 이런식으로 호출해야했는데,
    다시 고치려니 귀찮군요(올릴때마다 띄어쓰기 같은거를 다 nbsp 로 바꾸려면 힘들..).
    그런건 적당히 보세요..

    Posted 04 Apr 2004 at 11:08 pm
  2. 민구 wrote:

    음.. 그거외에도 틀린거 많아서 다시 고침.
    아무튼, C#이나 JAVA에서 이거 하는 방법에 대한
    아이디어있나요?

    자바 genetics에 대한 JSR-000…14 도 봤는데,
    이 아저씨들이 EBNF만 잔뜩 적어놔서
    무삼말인지 -_-;

    Posted 04 Apr 2004 at 11:12 pm

Post a Comment

Your email is never published nor shared.