C++에서 속성과 같은 기능을 구현하는 방법에 대한 몇 가지 방법을 온라인에서 찾았습니다. 제대로 작동하려면 몇 가지 사운드 해결 방법이있는 것 같습니다.속성을 구현하는지 여부
내 질문은 관리되는 언어의 속성이 널리 퍼지면서 내 코드에서 속성을 구현하기 위해 코드 분할 (또는 무엇인가)의 노력을해야합니까?
다른 사람이 사용하기 위해 전화 라이브러리를 작성하려고합니다. 추가 코드의 유효성을 검사하기에 충분한 속성이 필요하겠습니까?
C++에서 속성과 같은 기능을 구현하는 방법에 대한 몇 가지 방법을 온라인에서 찾았습니다. 제대로 작동하려면 몇 가지 사운드 해결 방법이있는 것 같습니다.속성을 구현하는지 여부
내 질문은 관리되는 언어의 속성이 널리 퍼지면서 내 코드에서 속성을 구현하기 위해 코드 분할 (또는 무엇인가)의 노력을해야합니까?
다른 사람이 사용하기 위해 전화 라이브러리를 작성하려고합니다. 추가 코드의 유효성을 검사하기에 충분한 속성이 필요하겠습니까?
반향을 믹스에 추가하지 않는 한 (런타임에 객체에 어떤 속성이 있는지 식별 할 수 있음) 속성은 getter 및 setter의 구문 설탕에 지나지 않습니다. 이 경우 getter와 setter를 사용할 수도 있습니다.
리플렉션이있는 속성은 실제로 C++ 프로그램에 유용 할 수 있습니다. Qt가 이것을 처리합니다 quite nicely.
액세서 기능을 사용하는 것만으로는 얻을 수없는 이점은 무엇입니까? 코딩하는 동안 다른 언어를 모방하는 대신 언어의 강점을 이용해야한다고 생각합니다. 그래서 나는이 것에 대해 반대표를 던지겠다. 그러나 MANAGED C++로 작성 중이며 정기적으로 C#과 인터페이스하기 위해이 코드를 사용하고 있으며 어떤 이유에서라도 네이티브 C# 프로그래머가 백엔드를 더 유용하게 만들고 싶다면 가치가있을 것입니다.
사실 더 성격이 뚜렷했습니다. 저는 현재 주로 C++로 코드를 작성하는 몇 명의 친구들과 프로젝트를 진행하고 있습니다. 이 프로젝트는 표준 C++로되어 있지만 속성 부족에 대한 연구가 진행 중입니다. – Veaviticus
접근자를 가진 개인 회원보다 속성과 같은 것의 한 가지 이점 : 참조를받을 수 있습니다. –
@Mike : C#에서 속성을 참조 할 수 없거나 참조로 전달할 수 없기 때문에 "C#과 같은 속성"을 사용하려는 경우에는 적합하지 않습니다. –
실제로 제대로 완료되면 등록 정보가 코드 손상을 방지합니다. 호출자가 코드를 변경하거나 걱정할 필요없이 속성의 구현을 변경할 수 있습니다.
예를 들어 소켓 번호를 사용하는 Socket 클래스가 있다고 가정 해 보겠습니다. int를 취하여 저장하는 속성으로 구현합니다.
그러나 귀하의 상사는 1024보다 작은 소켓 번호는 허용해서는 안된다고 말합니다. 귀하의 속성은 값을 받아들이지 않고 변경할 수 있습니다.
발신자 코드가 변경되지 않았습니다.
편집 : 질문에 대한 약간의 잘못된 이해 ... 나는 일반 접근 자 기능을 의미하는 속성을 사용했습니다.
답변이 질문과 관련이 없다면 삭제해야합니다. –
속성은 관용적이지 않습니다. 표준 C++ - 널리 사용되는 "속성과 같은"라이브러리가 하나도 없다는 사실에서 알 수 있습니다. 적합성이있는 C++로 적절하게 구현하는 복잡성은 중요하지만 접근 자 메서드를 직접 호출하는 것과 비교할 때 이점은 작고 스타일이 대부분입니다. 제 생각에는 귀찮은 일은 아닙니다.
QT는 속성과 함께 꽤 널리 사용됩니다. 특별히 신경 쓰지는 않지만 리플렉션은 속성 편집기를 통해 위젯을 디자인하는 데 유용합니다. – stinky472
Qt는 속성을 메타 데이터 개념으로 만 사용합니다 (getters 및 setter를 쌍으로 사용하기 위해). 그것들은 클라이언트 코드에서 노출되지 않습니다. 당신은 여전히 수동으로 접근자를'name()'과'setName()'등으로 호출합니다. 질문은 구문 적 설탕 (C#에서와 같이)과 같은 속성에 관한 것 같습니다. –
나는 한때 C++에서 Matlab 구조와 비슷한 것을 구현하려고 시도했다. 이자형. 이름있는 필드를 추가 할 수있는 구조. 그 후 나는 "언어와 싸우지 마라"라는 원칙을 굳게 믿었습니다.
하나의 프로그래밍 언어를 다른 것과 같이 동작시키려는 노력은 종종 inner platform effect의 특수한 경우입니다.
나는 다른 사람들과 동의합니다. getters와 setters를 사용하십시오.
C++에서 실제로 속성이 필요한 경우 이미 언어 확장으로 설정했을 수 있습니다. Visual C++은 관리되는 C++에 대해서는 거의 확실하지만 관리되지 않는 경우에도 마찬가지라고 생각합니다. 개인적으로, 내가 사용하는 유일한 이유는 관리되는 C++에서 .NET 규칙에 적합하기 때문입니다.
외부의 경우, 내부 플랫폼을 만들면 해결할 문제보다 더 많은 문제가 발생할 수 있습니다.
+1하지만 QT를 잘 처리하는 것에 대해서는 동의하지 않습니다. 누구나 C++ 언어 확장을 추가하는 별도의 컴파일러/전 처리기를 사용하여 '멋지게'반사/내성을 처리 할 수 있습니다. – stinky472
@ stinky472 : 사실,하지만 그것도 정말 나쁜 일을 할 수 있습니다. ;) 나는 Qt의 구현 자체가 훌륭하다고 생각한다. – Cogwheel