요약
여기에 짧은 대답 :
- 타입 정의가 실제로 컴파일 타임 코드 생성기에 의해 사용되는 변수입니다.
- C#은 코드 생성 언어 구문을 추가하지 않도록 설계되었습니다.
따라서 typedef 개념은 C# 언어와 잘 어울리지 않습니다. 다음 컴파일 된 C 코드를 뱉어 사전 처리 컴파일러로 시작했다 ++ C :
긴 대답 C++에서
, 그것은 더 의미가 있습니다. 이 "코드 생성기"시작은 여전히 최신 C++ 기능에 영향을 미칩니다 (즉, 템플릿은 본질적으로 컴파일 시간에 클래스와 함수를 생성하기위한 Turing-complete 언어입니다). 이 문맥에서 typedef는 컴파일 타임 타입 팩토리의 "결과"또는 타입을 "반환"하는 "알고리즘"을 얻는 방법이기 때문에 의미가 있습니다.
이 이상한 메타 언어 (부스트 외부에서 거의 마스터하지 않은)에서 typedef는 실제로 변수입니다.
설명하는 내용은 덜 복잡하지만 여전히 typedef를 변수로 사용하려고합니다. 이 경우 입력 변수로 사용됩니다. 그래서 다른 코드가 typedef를 사용할 때는 실제로 그 타입을 직접 사용하지 않습니다. 오히려 typedef 된 입력 변수를 기반으로 클래스와 메소드를 빌드하면서 컴파일 타임 코드 생성기 역할을합니다. C++ 템플릿을 무시하고 C typedef를 보면, 효과는 같습니다.C++은 다중 paradign 언어로 설계되었다
프로그래밍
C++ 및 제너 (OO 및 절차,하지만 부스트 때까지 작동하지 나왔다). 흥미롭게도, 템플릿은 예기치 않은 패러데인 인 생성 프로그래밍을 발전 시켰습니다. (Generative 프로그래밍은 C++ 이전에 있었지만 C++은 인기가있었습니다.) 생성 프로그램은 실제로 컴파일 될 때 실행 파일로 컴파일되는 필요한 클래스와 메소드를 생성하는 메타 프로그램입니다.
우리의 도구를 프로그래밍
C# 및 제너 천천히 같은 방향으로 진화하고있다. 물론 반사 방출은 "수동"생성 프로그래밍에 사용될 수 있지만 매우 고통 스럽습니다. LINQ 공급자가 표현식 트리를 사용하는 방식은 특성상 매우 생성 적입니다. T4 템플릿은 정말 가까이에 있지만 여전히 부족합니다. C# vNext의 일부가 될 "서비스로서의 컴파일러"는 일종의 변수 (typedef와 같은)와 결합 될 수 있다면 모든 것이 가장 유망한 것처럼 보입니다.
퍼즐의 한 조각은 still missing입니다. 생성 프로그램에는 자동 트리거 메커니즘이 필요합니다 (C++에서는 암시 적 템플릿 인스턴스화으로 처리 함).
아니요 C#의 모든 종류의 "코드 생성기"를 C#의 템플릿과 같이 사용하는 것은 C#의 모든 종류의 코드 생성기 (C++ 템플릿을 이해할 수있는 C++ 프로그래머가 거의 없음)입니다. 이것은 아마도 C#보다는 T4가 만족하는 틈새 일 것입니다.
결론 (요약 반복) 위의
모든이 말을하는 것이다
- 타입 정의 코드 발생기에 의해 사용되는 변수이다.
- C#은 코드 생성 언어 구문을 추가하지 않도록 설계되었습니다.
따라서 typedef 개념은 C# 언어와 잘 어울리지 않습니다.
왜 내장 된 유형에서 파생 될 수 없습니까? – arootbeer
나는 단지 궁금한가요? 어떤 상황이나 이유가 누군가가 이것을 원할 것입니까? 죄송합니다. 이상하게 들리면 왜 int를 사용하지 않으려하는지에 대해 무지합니다. 다른 개발자가 코드를 읽는 것이 혼란스러운 것처럼 들립니다. –
동의 해이 내용을 읽는 데 관심이 있지만 나쁜 습관이되어야합니다. –