2011-09-10 4 views
1

C++에서는 그럴 수 없다는 것을 알고 있지만 함수가있는 코드를 생성 할 수있는 툴체인 일 수 있습니다. 모든 클래스 목록. 예를 들어 여러 파일에 걸쳐 다음과 같은 내용이 있습니다.C++에서 특정 클래스를 상속받은 모든 선언 된 클래스의 목록을 얻는 방법

class MyClass : public ParticularClass { 
    .... 
} 

class MyClass2 : public ParticularClass { 
    .... 
} 

그런 다음 런타임 중에 클래스의 단일 인스턴스에 대한 포인터를 원합니다. 의 내 생성 된 코드는 다음과 같은 형태 가정 해 봅시다 :

void __populate_classes() { 
    superList.append(new MyClass()); 
    superList.append(new MyClass2()); 
} 

는 또한, superList 유형 List<ParticularClass*>이 될 것입니다. 또한 Qt를 사용하여 ParticularClass이 파생되므로 QObject이되므로 어쨌든 클래스 이름을 가져올 수 있습니다. 기본적으로 클래스를 내관해야하므로 내 내부 코드가 새로 정의 된 유형에 대해별로 신경 쓰지 않습니다.

그래서 툴체인으로이 코드를 생성 할 수 있습니까? 만약 qmake 혼자서 가능하다면 괴상한 케이크에 장식하는 것과 같습니다 :)

시간 내 주셔서 감사합니다.

답변

2

Doxygen은 오프라인에서이 작업을 훌륭하게 수행합니다. 다양한 IDE가이 작업을 훌륭하게 수행합니다 - 오프라인. 컴파일러는 이것을하지 않습니다. 그러한 지식은 컴파일러가 필요하거나 사용하지 않습니다.

0

여기서 저는 4 Understanding 4 C++라는 도구를 사용합니다. 이 도구는 코드를 분석하는 데 도움이되는 도구입니다. 아주 쉽게 이것을 할 것입니다. 하지만 가장 좋아하는 부분은 C 및 Perl API가 제공된다는 것입니다.이 API를 사용하면 '이해할 수있는'추상 구문 트리를 활용하여 자체 정적 분석 도구를 캡슐화하고 작성할 수 있습니다. 이 API를 사용하여 많은 도구를 작성했습니다.

어쨌든, SciTools에 의해 작성되었습니다. http://scitools.com 나는 그들을 위해 일하지 않는다. 나는 진심으로 그들의 제품을 좋아한다. 사실 나는 C API를 랩핑하여 몇 년 전에 CodePlex에 올린 C# API를 작성했습니다. 정적 분석 도구를 작성하는 데 C 또는 Perl을 사용하는 것이 좋습니다.

0

나는 당신이하려고하는 것이 좋은 생각이라고 생각하지 않습니다. 당신이 그것을 이해하기가 힘든 시간이 지나면 코드를 유지할 사람들.

어쩌면 당신은 C++에서 어떻게 할 수 있는지 보게 될 것입니다. 공장 디자인 패턴을 구현하기 위해 내가 생각할 수있는 한 가지 해결책이 있습니다. 공장에서 모든 데이터 유형을 반복하고 수퍼리스트에 추가 할 수 있습니다.

ack ": *public ParticularClass" *.h 
: 당신은 항상 한 줄의 상속을 선언 할 경우 작업을 수행 할 수 ack (단순 그렙 교체)를 사용하여

어떤 방법,

관련 문제