[질문] 구조체의 멤버변수를 알수있는 방법이 있나요??

neogea의 이미지

구조체를 선언했을때 해당 구조체의 멤버를 알아내는 방법이 있을까요?

struct AA{
    int a;
    char b[10];
    int c;
};

struct AA aa;

이와 같이 선언을 하였을 때 프로그램상에서 AA 또는 aa의 멤버변수는 어떤
것들이 있고 그것들의 타입은 무엇이다. 라고 알아낼수 있는지요. 혹시 알수는
없더라도 그 값을 출력이 가능한지 알고 싶습니다.

제가 만들고자 하는건 어떤 구조체의 타입과 변수를 주면 해당 맴버들의
값을 자동으로 출력하는 함수를 하나 만들려고 하거든요. 물론 변수만 넘겨서
출력이 가능하면 더 좋구요...^^;;

익명 사용자의 이미지

이런 식의 struct 선언이 가능하다면 C++을 사용하시는 것 같은데.. 멤버 변수를 추가하시면 안되나요?

grayer의 이미지

말씀하신 기능은

C++ 에 RTTI (Runtime type information ?) 이란 것과

비슷한거 같군요

런타임시에 어떤 개체의 타입을 체크할수 있게 해줍니다.

도움이 되셨는지 ;;

익명 사용자의 이미지

멤버 변수를 추가하는 개념 보다는 여러게의 서로다를 구조체를 사용하는
와중에 하나의 함수로 서로다른 구조체들의 값을 찍을수 있는 함수를 만들
려고 하거든요. 그래서 하나의 구조체에 멤버변수를 추가하는건 제 의도와는
좀 다른것 같습니다.
답변 감사 드립니다. ^^

----------------------------------------------------------------
RTTI라는거 잘 몰라서 찾아봤는데요 실시간으로(런타임시)에 개체의 타입
(클레스를 말하는것 같습니다)을 확인하는 것으로 구조체의 멤버 변수를
체크하는 방법은 잘 안나와 있네요...^^;; RTTI에 대해서 좀더 봐야 할것
같지만 혹시라도 객체가 아닌 구조체의 멤버를 알아내는것이 있으면 ^^...
그래도 가능성이 있는 답변에 감사 드립니다.

cdecl의 이미지

구조체를 선언했을때 해당 구조체의 멤버를 알아내는 방법이 있을까요? 

따로 구조체에 그런 역할을 하는 멤버함수나 아니면 멤버에대한 정보를 인위적(?)으로 넣지 않는이상 언어의 차원에서는 그런 기능은 지원하지 않습니다.

그런쪽에 라이브러리에 관심있으시다면 Loki라이브러리의 TypeList나 Boost라이브러러의 tuple같은걸 알아보십시요.

만약에 같은 함수이름으로 인터페이스 할려고 하는 목적이라면 함수의 겹지정으로 처리 하면 되고요

그리고 RTTI는 그런 목적으로 사용하는것이 아니고 수직적인 클래스 상속관계에서의 포인터 혹은 참조 변수의 실행시간 타입정보혹은 그냥 일반적인 타입에 대한 정보를 알아내는 메커니즘 입니다.

--
cdecl

--
cdecl

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.