조건에 따라 리턴타입이 다른 함수 만들기?
글쓴이: jinserk / 작성시간: 화, 2009/12/15 - 5:16오후
예를 들어서,
template <typename T>
class A {
A<T>* t1_ptr;
T* t2_ptr;
bool flag;
public:
(T1& or T2&) operator[](int idx) {
if (flag)
return t1_ptr[idx];
else
return t2_ptr[idx];
}위와 같은 클래스가 있다고 할때요.
멤버함수의 리턴 타입을 내부 조건에 따라 다르게 주어야 할 필요가 생겼습니다.
operator[] 가 unitary parameter 라서 function overriding 도 못할 듯 싶구요.
뭔가 좋은 꽁수가 없을까요?
Forums:


복합체 패턴(composite
복합체 패턴(composite pattern)을 써봤습니다.
그런데 제가 코드의 의도를 잘 파악했는지 모르겠습니다.
이런 걸 의도하신 것 맞습니까?
감사합니다.
직접 코딩까지 해주시니 정말 감사드립니다.
원래 의도는 아래와 같은 코드였습니다.
template <typename T> class A { private: A<T>* pcontainer_; T* pelement_; bool is_container_; public: A(int s1) { set(s1); } A(int s1, int s2) { set(s1, s2); } void set(int s1) { is_container_ = false; pcontainer_ = NULL; pelement_ = new T [s1]; } void set(int s1, int s2) { is_container_ = true; pcontainer_ = new A<T> [s1]; pelement_ = NULL; for (int i = 0; i < s1; i++) pcontainer_[i].set(s2); } (????) operator[] (int idx) { if (is_container_) return pcontainer_[idx]; else return pelement_[idx]; } };올려주신 코드와 제 의도한 코드를 놓고 비교해보니,
저는 A 의 하위를 1차원 벡터로 생각했던 것에 비해
올려주신 코드는 하위를 원소 하나하나로 생각하는데 차이가 있는 듯 합니다.
생각해보니 캐스트연산자를 적절히 쓰면 될것도 같네요.
좋은 힌트를 주셔서 정말 감사합니다.
Leo.
댓글 달기