2014-07-24 2 views
3

클래스 외부에서 클래스의 기본 유형을 가져 오는 방법은 무엇입니까? 문서에서 parent이라는 특성을 발견했지만 사용법을 잘 모르겠습니다.D 클래스의 부모 가져 오기

module test; 
import std.stdio; 

class A {} 
class B : A { } 

void main() { 
    writeln(typeid(__traits(parent, B))); 
    writeln(typeid(__traits(parent, test.B))); // try prefixing with module name 
} 

나는 적어도 두 번째 경우를 얻을 기대하지만,이 이상적으로

void 
void 

인쇄 내가 별칭 및 사용에 어떤 클래스 T의 기본 클래스를 지정하고자하는 나는 다른 어떤 유형이든 마찬가지입니다. 예 :

답변

6

는 약 범위입니다. __traits(parent, B)test 모듈입니다. 문서가 너무 모호합니다.

std.traits.BaseClassesTuple입니다.

일반적으로 std.traits을 먼저 살펴보십시오. 추악한 __traits은 사용자 코드에 자주 등장하지 않아야합니다.


일부 작업 예제 코드 :

module test; 
import std.stdio; 
import std.traits; 

class A {} 
class B : A { } 

void main() { 
    writeln(__traits(parent, B).stringof); /* prints "module test" */ 
    alias Bases = BaseClassesTuple!B; 
    writeln(Bases.stringof); /* prints "(A, Object)" */ 
    static assert(Bases.length > 0); 
    alias T = Bases[0]; 
    auto t = new T; 
} 
관련 문제