class Data
{
public:
float m_Data;
};
template<class T>
class Op1 : public T
{
public:
Op1()
: T()
{ }
float m_Op1;
};
template<class T>
class Op2 : public T
{
public:
Op2()
: T()
{ }
float m_Op2;
};
template<class T>
class Op3 : public T
{
public:
Op3()
: T()
{ }
float m_Op3;
};
---------------------------------
Op3<Op2<Op1<Data>>> Data;
Data.m_Data;
Data.m_Op1;
Data.m_Op2;
Data.m_Op3;
c++ 템플릿을 이용해서 데코레이터 패턴을 이용해서 Data에 Op1 ~ Op3 멤버를 접근할 수 있도록 하는 방식인데
c#에서 이런 방식으로 표현하려면 어떻게 해야 하나여? 제네릭으로 구현이 잘 안 되는데;;;;;
이거 쓰는 이유가 예를 들면
무기 정보가 필요한데
어떤 무기는 이동량을 가지고 어떤 무기는 폭발력을 가진다고 가정한다면
Movement<Explosion<DataBase>> DataSheet;
이런식으로
Movment가 가지는 멤버 변수 Movement와
Explosion가 가지는 멤버 변수 ExplosionDamage, ExplosionRange을
정적으로 만들고 싶습니다.
데코레이터 패턴을 공부하다가
DataBase를 상속받는 Movment, Explosion을 데코레이터로 이용하면 멤버 접근이 가능한 것을 확인했는데
(동적 데코레이터는 멤버 접급이 안 됨....)
c++은 템플릿 쓰면 가능한데 c#은 제네릭으로 어떻게 저걸 구현할까요?
스비니
우선 데코레이터 패턴은 같은 인터페이스로 다양한 효과를 내는데 의의가 있는 건데, 어떤 데코레이터를 쓰느냐에 따라서 다뤄야 하는 멤버 변수(인터페이스)가 달라지는 경우라면 데코레이터라고 보기 어렵지 않나.. 싶네요.
제네릭으로는 조금 어려울 것 같고 그냥 dictionary같은 걸 이용해서 데이터 기반으로 구현하시는 건 어떨까요?
RX7900XTX
맵컨테이너로 해보고 싶긴한데 유니티에서 인스펙터 뷰에서 수정하는 방안으로 가고 싶었는데
이게 제네릭으로 생성하거나 모든 케이스에 대해서 구조체를 만들어야 하는 상황이라 피하고 싶었거든요...
key value 쌍으로 이루는 dictionary게 제일 무난한데
문제는 인스펙터 뷰에서는 저런 컨테이너가 안 됨;;;;
어쩔 수 없이 c# 코드로 가지고 있는데 맘 편하긴 할 듯....
일단 코드 구조부터 재설계중임;;;;