2016-11-11 1 views
1

기본 변수가이 래퍼를 통해 수정 될 때 변경 사항을 알리는 변수 래퍼가 있으므로 다른 개체가 변경 내용을 수신 할 수 있습니다.자동 공제를 통해 복사 할당보다 연산자 <some_type>()을 고려하도록 할 수 있습니까?

그것은 작동 잘 한 약간의 딸꾹질로 (즉, 나는이 변경 신호의 방법이 없지만,) (기본 객체 등 멤버 함수를 호출, 빼기, 추가 할당 할 수 있습니다) : 나는

을 할 경우
struct some_object_type 
{ 
    wrapper<int> some_wrapper; 
} 

int main() 
{ 
    some_object_type some_object; 
    auto value = some_object.some_wrapper; 
} 

value 여기서 정확히 wrapper<int>으로 추론됩니다. some_object.some_wrapperint 인 것처럼이 구조를 동작시키는 방법이 있습니까? valueint 변수로 추정됩니다.

+0

왜'some_wrapper'의 타입이'int'가 아닌'int'로 추론되기를 원하십니까? – Peter

+2

'some_wrapper'에 대한 복사 생성자를'삭제 '하고 암시 적 변환 연산자를'T'에 쓸 수 있습니다. 그게 너에게 합당한가? – TartanLlama

+0

'auto value = ...'는 복사 생성의 예이며 할당은 아닙니다. – KyleKnoepfel

답변

0

@TartanLlama는 주석에서 올바른 해결책을 가지고 있습니다. 그러나 auto const& value = ...을 대신 지정한 경우 auto에 추론 하시겠습니까? 이 경우 암시 적 변환은 작동하지 않습니다. 당신이 자동 포기하지 않는 한 아마

struct some_object_type 
{ 
    wrapper<int> some_wrapper; 
} 

int main() 
{ 
    some_object_type some_object; 
    auto value1 = some_object.some_wrapper; // deduces to wrapper<int> 
    auto value2 = some_object.some_wrapper(); //deduces to int  
} 

당신이 기대했던 해결책 아닙니다, 그러나 :

나는 전에이 문제로 실행했습니다, 그리고 내가 가지고 올 수있는 가장 좋은 방법은 wrapper<T>::operator() 기능을 제공하는 것이 었습니다 유형 공제, 당신은 최고의 리조트입니다 @ TartanLlama의 제안.

관련 문제