GSI

C++ 의 변수를 C#의 프로퍼티 처름 사용하기..

말은 거창하지만 다른건 없다. 해당 값을 입력 받을 경우 다른 변수에 값을 추가 하거나 기타 다른 이벤트를 처리 할때 해당 값에 의존적인 클래스에서 처리 할 수 있다는 부분이다.
m_Val = 100 이렇게 입력 받은 후에 다른 이벤트 처리를 의존 프로퍼티 클래스를 상속받은 클래스에서 처리가 가능하게 만들어 본겁니다. ^^..
사용은 해봐야 알겠지만. 괜찮은 확장이 가능해 질거 같네요..

--라이브러리 클래스--

class CGsiDependencyProperty
{
public:
 CGsiDependencyProperty() {}
 virtual ~CGsiDependencyProperty() {}

 //값이 바뀌게 되면 호출할 수 있도록 바인딩 되는 함수
 virtual void PropertyChanged() {
  int iii = 0;
 };
};

template<class T>
class CGsiDataBind
{
public:
 CGsiDataBind() { m_pDependencyProp = NULL; }
 virtual ~CGsiDataBind() { }

 // int a = ?? 이런 코드가 가능합니다.
 operator T() {
  return m_Data;
 }

 // ?? = 100 이런 코드가 가능합니다.
 T operator = (T value) {
  m_Data = value;

  if(m_pDependencyProp)
   m_pDependencyProp->PropertyChanged();

  return m_Data;
 }

 friend class CGsiDependencyProperty;

 void SetDepend(CGsiDependencyProperty* refOper0 = NULL) {
  m_pDependencyProp = refOper0;
 }

protected:
 T      m_Data;
 CGsiDependencyProperty* m_pDependencyProp;
};

-- 사용법--
해당 변수의 값을 입력 할때 특정 클래스의 함수가 호출 되도록 하는 구조를 취할때
사용하면 됩니다.

호출 되는 함수가 있는 클래스 생성할때 CGsiDependencyProperty을 상속 받아서, virtual로된 함수 PropertyChanged() 를 선언해야합니다

class CDependA : public CGsiDependencyProperty
{
 virtual void PropertyChanged() {
  //값이 바뀌면 호출됨
 };
};

이제 변수를 선언하고 프로퍼티 클래스를 선언해서 연결한 후에
변수를 사용하면 됩니다.

 // 의존 프로퍼티 선언
 CDependA    m_Val0Property;

 // 변수 선언
 CGsiDataBind<int>  m_Val0;
 m_Val0.SetDepend(&m_Val0Property);

 m_Val0 = 100;           // 100을 입력하면 m_Val0Property의 클래스 내부 함수가 호출됩니다.
 int value = m_Val0;    // 해당 값을 일반 변수로 리턴받을 수 있습니다.

Posted by gsi
: