c++ 헤더파일에서 클래스 정보 추출하는 방법

익명 사용자의 이미지

현재 *.h 파일과 *.lib 파일로 제공되는 c++ 정적라이브러리를 사용중입니다
그리고 헤더파일에 있는 클래스의 이름, 멤버변수, 멤버함수 목록을 추출하려고 하는데
이 라이브러리 소스가 없어서 수정을 할 수가 없는 상황입니다
오직 헤더파일만 이용해서 클래스들의 멤버 정보를 추출해야하는데

헤더파일을 읽은후 정규표현식으로 클래스를 파싱하는 방법으로 해야할까요?
아니면 다른 좋은 방법이 있다면 조언좀부탁드립니다 ㅠㅠ

라스코니의 이미지

ctags를 쓸 수 있는 환경이라면 ctags를 써 보세요.
ctags -V --c-kinds=+p xxx.hpp
라면 tags 텍스트 파일에 웬만한 클래스 멤버 함수 정보 다 보일 겁니다.

그 다음에 sed, awk 등으로 파싱한다면 원하시는 게 대부분 가능할 것 같네요.

익명 사용자의 이미지

ctags 는 써본적이 없는데
이런 상황에 활용할수 있나보군요
답변 감사합니다~!!

Anti-Lock의 이미지

doxygen 으로 xml 출력해서 추출 방법도 가능 할겁니다.
정보 추출해서 무얼 하시려는지 궁금합니다!

익명 사용자의 이미지

클래스 멤버변수들을 추출해서 create table 필드1 타입, 필드2 타입,... 쿼리를 자동으로 만들어
각 클래스마다 테이블을 자동으로 생성하여 데이터를 저장하기 위해서입니다

사용중인 라이브러리가 오픈소스가 아니라서 소스수정이 불가능하고
*.h 헤더파일에 있는 클래스 선언부의 정보밖에 없는 상황입니다..

c++ orm 라이브러리나 c++ 리플렉션 라이브러리들을 찾아보니 소스를 수정해야 사용이 가능한것같더라구요
그래서 다른 방법을 고민하다가
헤더파일의 클래스 선언부분을 파싱하여 클래스 멤버 목록을 추출하도록 하면 리플렉션 비슷한 기능을 만들 수 있을것같아서
문의 드렸습니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.