2017-10-23 9 views
0

나는 연산자 오버로드로 클래스 속성에 대한 "액세스 바로 가기"를 구현하려고하지만 작동시키지 못합니다. 심지어 가능할까요?연산자 오버로드로 클래스 속성에 대한 바로 가기에 액세스

내가 뭘하려 :

struct Fruit { 
    float energy; 
    float taste; 
} 

template<typename T> 
class Value { 
public: 
    T val; 
    T& operator->() { return val; } 
} 

Value<Fruit> apple; 

// this work: 
apple.val.energy = 0.5f; 
cout << apple.val.energy << endl; 

// this do not and i want this to work: 
apple->energy = 0.5f; 
cout << apple->energy << endl; 
+0

확신'운용자는>'포인터를 반환 할 필요가 – vu1p3n0x

답변

2

operator->가 포인터를 반환해야하기 때문에 그것은 작동하지 않습니다,하지만 당신은하지 않습니다.

error: result of ‘operator->()’ yields non-pointer result

대신이 시도 : 컴파일러는 예를 들어, 그에 대해 경고해야

template<typename T> 
class Value { 
public: 
    T val; 
    T* operator->() { return &val; } 
}; 

Live Demo

+0

확실히 그냥해야 'operator->'를 적용 할 수있는 것을 돌려 주시겠습니까? –

+0

그게 고마워요. – Kazz

+0

@Kazz :'operator->'는 단지 * something *을 반환 할 수 없습니다. ** 반드시 1) 포인터 또는 2) 오버로드 된 연산자 - >' –