C++에 해당하는 Python 속성이 있습니까? 또는 게터와 세터를 사용하여이 작업을 수행하는 것이 더 좋을까요?파이썬 속성에 해당하는 C++
답변
예, 명시 적 getter 및 setter는 C++에서 가장 가까운 구문입니다.
표준 C++에는 속성이 없습니다. 당신은 마이크로 소프트 플랫폼을 개발하는 경우, 당신이 그들의 언어 확장 사용할 수 있습니다 C에서
를 ++ 당신은 어느 쪽인지를 호출 멤버 함수있어, 또는 당신은 데이터 멤버에 접근하고 있습니다. 파이썬 속성은 근본적으로 후자의 구문을 사용하여 전자를 수행하는 방법이며 C++에서이를 수행하는 합리적인 방법은 없습니다.
이론상으로 매크로로 무언가를 해킹 할 수는 있지만, 어쩌면 꽤 좋지는 않을 것입니다. 또는 분별있는. 함수를 데이터처럼 보이게하는 유일한 이유는 이전의 호출 코드와의 호환성을 유지하는 것입니다. 하지만 C++에서는 바이너리 호환성을 제공하지 못하며 매크로가 이미 다른 컨텍스트에서 다른 이름으로 looks_like_data
이라는 이름을 사용하는 호출 코드를 깨뜨리는 경우 소스 호환성을 제공하지도 않습니다. 그래서 요점은별로 없습니다.
당신이 할 수있는 또 다른 것은 데이터의 "논리적"유형에 대한 프록시 역할을하는 실제 데이터 멤버를 만드는 것입니다 :
struct Proxy {
Foo *foo;
Proxy(Foo *foo) : foo(foo) { }
operator int() const {
// getter code goes here,
// use (const Foo*)foo rather than foo
}
Proxy &operator=(int a) {
// setter code goes here
}
// optionally also implement boilerplate +=, -=, etc.
};
struct Foo {
// optionally
// friend class Proxy;
Proxy looks_like_data;
Foo() : looks_like_data(this) { }
};
이 거의 아니지만 꽤 합리적이다. 암시 적 변환을 사용하면 여전히은 소스 호환성을 손상시킵니다. 체인에 사용자 정의 암시 적 변환이 하나만있을 수 있기 때문에 발신자가 looks_like_data
이 실제로 int
이고 코드가 암시 적으로 변환 될 때 코드를 다시 작성한 경우 그 int
을 Bar
로 변경하면 looks_like_data
이 Proxy
이되어 더 이상 암시 적으로 Bar
으로 변환되지 않고 코드가 깨졌습니다.
결국 클래스에 읽기/쓰기 속성처럼 보이는 것이 필요한 경우 getter/setter 함수를 사용하는 것이 가장 좋습니다.
아주 멋진 솔루션 –
- 1. 파이썬 해당하는 짧은 형식의 "만약"
- 2. Ruby에 해당하는 파이썬 "_"
- 3. 루비의 __method__에 해당하는 파이썬?
- 4. Jstack에 해당하는 파이썬?
- 5. find2perl에 해당하는 파이썬
- 6. 파이썬 repr()에 해당하는 Java?
- 7. 파이썬 3에 해당하는 구성 모듈
- 8. Interface Builder의 size 속성에 해당하는 코드
- 9. Java 자원에 해당하는 C#
- 10. rangeOfCharacterFromSet에 해당하는 Monotouch (C#)
- 11. JMX에 해당하는 C++?
- 12. C#에서 JOptionPane에 해당하는?
- 13. JGroups에 해당하는 C++ 라이브러리
- 14. C++ Tidy에 해당하는 것
- 15. curl -b (--cookie)에 해당하는 파이썬
- 16. 파이썬 사전의 최대 값에 해당하는 키
- 17. Rebol에는 javascript 프로토 타입 속성에 해당하는 것이 있습니까?
- 18. 앵커/도크 속성에 해당하는 wpf로 컨트롤의 크기를 조절하는 방법
- 19. Windows에서 더블 클릭에 해당하는 파이썬 보조 프로세스 모듈
- 20. C#에 해당하는 friend는 무엇입니까?
- 21. Java XDoclet에 해당하는 C++ 도구
- 22. 연속적인 메모리가있는 C++ 벡터에 해당하는?
- 23. reinterpret_cast에 해당하는 C 코드는 무엇입니까?
- 24. Objective-C++에 해당하는 __OBJC__
- 25. C#에서 $ _FILES에 해당하는 것
- 26. C# Java IdentityHashMap에 해당하는 것
- 27. FactoryGirl/Machinist에 해당하는 C#/Net
- 28. JNDI에 해당하는 C++은 무엇입니까?
- 29. Python의 로그 라이브러리에 해당하는 C++
- 30. C#의 Java에 해당하는 유형?
내가 그것에 대해 잘 모르겠지만, 나는 당신이 파이썬의 속성을 에뮬레이트 할 수 있다고 생각 해요. 구현을 제한하는 데 사용되는 C++ 모의 템플릿 클래스 내에서 (편집을하기 전에 여기에 잘못된 오타가 있습니다.). 이 템플릿을 사용하여 형식을 강제하므로 잘못 사용하면 컴파일러 오류가 반환됩니다. 이 같은 python의 속성을 다시 만들어야합니다 :) –