2010-06-29 3 views
3

C++에서 속성과 같은 기능을 구현하는 방법에 대한 몇 가지 방법을 온라인에서 찾았습니다. 제대로 작동하려면 몇 가지 사운드 해결 방법이있는 것 같습니다.속성을 구현하는지 여부

내 질문은 관리되는 언어의 속성이 널리 퍼지면서 내 코드에서 속성을 구현하기 위해 코드 분할 (또는 무엇인가)의 노력을해야합니까?

다른 사람이 사용하기 위해 전화 라이브러리를 작성하려고합니다. 추가 코드의 유효성을 검사하기에 충분한 속성이 필요하겠습니까?

답변

4

반향을 믹스에 추가하지 않는 한 (런타임에 객체에 어떤 속성이 있는지 식별 할 수 있음) 속성은 getter 및 setter의 구문 설탕에 지나지 않습니다. 이 경우 getter와 setter를 사용할 수도 있습니다.

리플렉션이있는 속성은 실제로 C++ 프로그램에 유용 할 수 있습니다. Qt가 이것을 처리합니다 quite nicely.

+0

+1하지만 QT를 잘 처리하는 것에 대해서는 동의하지 않습니다. 누구나 C++ 언어 확장을 추가하는 별도의 컴파일러/전 처리기를 사용하여 '멋지게'반사/내성을 처리 할 수 ​​있습니다. – stinky472

+0

@ stinky472 : 사실,하지만 그것도 정말 나쁜 일을 할 수 있습니다. ;) 나는 Qt의 구현 자체가 훌륭하다고 생각한다. – Cogwheel

9

액세서 기능을 사용하는 것만으로는 얻을 수없는 이점은 무엇입니까? 코딩하는 동안 다른 언어를 모방하는 대신 언어의 강점을 이용해야한다고 생각합니다. 그래서 나는이 것에 대해 반대표를 던지겠다. 그러나 MANAGED C++로 작성 중이며 정기적으로 C#과 인터페이스하기 위해이 코드를 사용하고 있으며 어떤 이유에서라도 네이티브 C# 프로그래머가 백엔드를 더 유용하게 만들고 싶다면 가치가있을 것입니다.

+0

사실 더 성격이 뚜렷했습니다. 저는 현재 주로 C++로 코드를 작성하는 몇 명의 친구들과 프로젝트를 진행하고 있습니다. 이 프로젝트는 표준 C++로되어 있지만 속성 부족에 대한 연구가 진행 중입니다. – Veaviticus

+0

접근자를 가진 개인 회원보다 속성과 같은 것의 한 가지 이점 : 참조를받을 수 있습니다. –

+0

@Mike : C#에서 속성을 참조 할 수 없거나 참조로 전달할 수 없기 때문에 "C#과 같은 속성"을 사용하려는 경우에는 적합하지 않습니다. –

0

실제로 제대로 완료되면 등록 정보가 코드 손상을 방지합니다. 호출자가 코드를 변경하거나 걱정할 필요없이 속성의 구현을 변경할 수 있습니다.

예를 들어 소켓 번호를 사용하는 Socket 클래스가 있다고 가정 해 보겠습니다. int를 취하여 저장하는 속성으로 구현합니다.

그러나 귀하의 상사는 1024보다 작은 소켓 번호는 허용해서는 안된다고 말합니다. 귀하의 속성은 값을 받아들이지 않고 변경할 수 있습니다.

발신자 코드가 변경되지 않았습니다.

편집 : 질문에 대한 약간의 잘못된 이해 ... 나는 일반 접근 자 기능을 의미하는 속성을 사용했습니다.

+2

답변이 질문과 관련이 없다면 삭제해야합니다. –

4

속성은 관용적이지 않습니다. 표준 C++ - 널리 사용되는 "속성과 같은"라이브러리가 하나도 없다는 사실에서 알 수 있습니다. 적합성이있는 C++로 적절하게 구현하는 복잡성은 중요하지만 접근 자 메서드를 직접 호출하는 것과 비교할 때 이점은 작고 스타일이 대부분입니다. 제 생각에는 귀찮은 일은 아닙니다.

+0

QT는 속성과 함께 꽤 널리 사용됩니다. 특별히 신경 쓰지는 않지만 리플렉션은 속성 편집기를 통해 위젯을 디자인하는 데 유용합니다. – stinky472

+0

Qt는 속성을 메타 데이터 개념으로 만 사용합니다 (getters 및 setter를 쌍으로 사용하기 위해). 그것들은 클라이언트 코드에서 노출되지 않습니다. 당신은 여전히 ​​수동으로 접근자를'name()'과'setName()'등으로 호출합니다. 질문은 구문 적 설탕 (C#에서와 같이)과 같은 속성에 관한 것 같습니다. –

0

나는 한때 C++에서 Matlab 구조와 비슷한 것을 구현하려고 시도했다. 이자형. 이름있는 필드를 추가 할 수있는 구조. 그 후 나는 "언어와 싸우지 마라"라는 원칙을 굳게 믿었습니다.

0

하나의 프로그래밍 언어를 다른 것과 같이 동작시키려는 노력은 종종 inner platform effect의 특수한 경우입니다.

나는 다른 사람들과 동의합니다. getters와 setters를 사용하십시오.

C++에서 실제로 속성이 필요한 경우 이미 언어 확장으로 설정했을 수 있습니다. Visual C++은 관리되는 C++에 대해서는 거의 확실하지만 관리되지 않는 경우에도 마찬가지라고 생각합니다. 개인적으로, 내가 사용하는 유일한 이유는 관리되는 C++에서 .NET 규칙에 적합하기 때문입니다.

외부의 경우, 내부 플랫폼을 만들면 해결할 문제보다 더 많은 문제가 발생할 수 있습니다.

관련 문제