2012-03-23 3 views
0

나는 타입 시스템에 관한 연구를 수행 중이다. 이 작품에서 저는 변종의 사용법, 구조적인 아류 유형, 보편적 인 다형성 및 대중적인 언어의 실존 적 다형성을 조사하고 있습니다. heskell과 같은 기능 언어, ocaml은 그러한 기능을 제공합니다. 하지만 C++과 같은 대중적인 언어가 위의 기능을 제공하는지 여부를 원합니다. 즉, C++은변이체, C++의 실존 다형성

  1. 구조상 하위 유형

  2. 범용 다형

  3. 존재 다형성 변이체를 구현하는 방법을 의미한다.

+0

변종에 대해서는 boost.variant를 볼 수 있습니다. 나머지는 무엇이 될지 모릅니다. (아마 가변성 템플릿으로 처리 할 수 ​​있습니다.) –

+0

안녕하세요 변종은 구조체 및 공용체로 구현할 수 있습니까? –

답변

2
  1. 노조 변이체의 기본적인 형태로 보여 질 수 있지만, 실제로는 그들이 더 많은 메모리를 오버레이 (불안전)에 대한 기본기구이다.

  2. C++에서는 구조 유형 지정은 물론 하위 유형 지정은 할 수 없습니다. 모든 유형은 공칭입니다.

  3. 템플릿은 보편적 인 다형성과 표면적으로 유사하지만 실제로는 매우 다릅니다. 본질적으로, 그들은 타입 검사가 거의 없거나 전혀없는 영광스러운 매크로입니다 (매크로와 마찬가지로, 검사와 코드 생성은 확장 후에 발생합니다).

  4. C++에는 존재 형식의 형식이 없습니다 (Java에서는 제한된 형식, 즉 와일드 카드).

이러한 기능 중 일부는 하위 유형 지정을 사용하여 어느 정도 시뮬레이트 될 수 있지만 훨씬 덜 표현 적이거나 편리합니다.

+0

불완전한 클래스 유형 (가장 좋은 예는 pimpl 관용구)을 통해 실존 유형을 에뮬레이션 할 수 있지만이를 밀어 낼 수 있습니다. – GManNickG

+0

'boost :: variant'는 변종을 매우 훌륭하게 구현 한 것입니다. 개념 제안은 구조적 하위 유형 지정을 구현합니다. 또한 타입 시맨틱의 계통 발생에 대해서는 많이 알지 못하지만 ... 범용 다형성을 엄격한 유형으로 검사하는 템플릿 특수화 부분 순서 지정이 아닌가? 이것은 메타 프로그램에서 타입 구조를 파견하는 중요한 도구입니다. – Potatoswatter

+0

안녕하세요, 저는 기본적인 프로그래밍 언어 기능을 연구 중이므로 왜 boost :: variant가 좋은 지적이 될 수 없다고 생각합니다. btw, 런타임 다형성 종류의 구조적 타이핑을합니까? @ Andreas Rossberg –