2017-12-02 18 views
-1

런타임시 C++ 클래스 인스턴스의 식별자를 프로그래밍 방식으로 검색하려고합니다. 나는 C++이 리플렉션을 아직 지원하지 않는다는 것을 알고 있지만 거기에 대안 솔루션이 있습니까? "my_obj"을 인쇄해야이 프로그램을 실행"this"포인터를 사용하여 객체 이름을 얻을 수 있습니까?

class Foo { 
    Foo() { 
    auto name = reflect::getIdentifierName(this); 
    std::cout << name << std::endl; 
    } 
}; 

void main() { 
    Foo my_obj; 
} 

: 예를 들어 다음 예제를 제공. 이 기본 리플렉션 기능을 구현하는 데 사용할 수있는 유틸리티 라이브러리를 찾고 있습니다.

libclang이 이러한 정보를 추출하는 데 사용될 수 있는지 궁금해합니다. 그렇다면이 경우 정보를 추출하는 데 reflection 함수를 빌드하는 방법에 대한 힌트가 필요합니다.

+0

이는 개체의 식별자입니다. 이름을 생성자에 문자열로 지정하고 저장하고 getter에서 반환하는 것을 고려 했습니까? – Yunnosch

+1

개체에 이름이 없으며 변수가 있습니다. 일반적으로 객체와 변수 사이에는 1 : 1 관계가 없습니다. –

+0

프로그래밍 방식으로 클래스 개체 인스턴스의 이름 (클래스 이름 아님)을 검색하는 데 도움이되는 도구를 찾고 있습니다. 예를 들어 모든 파서 도구. –

답변

1

예,하지만 구현 정의되었습니다. 스스로 위험을 감수하십시오.

윤 노사의 제안은 더 많은 맥락없이 훨씬 합리적으로 들립니다.

#include <iostream> 
#include <typeinfo> 

class Foo { 
public: 
    Foo() { 
    const char * const name = typeid(this).name(); 
    std::cout << name << std::endl; 
    } 
}; 

int main() 
{ 
    Foo my_obj; 
} 
+0

이 답변을 제공해 주셔서 감사합니다. 이 솔루션은 "my_obj"가 아닌 "Foo"를 출력합니다. 클래스 이름이 아닌 클래스 인스턴스 변수를 출력하는 방법을 찾고 있습니다. –

+0

당신이 말하는 "클래스 인스턴스 변수"는 무엇입니까? 자동으로 제공되는 변수는 알지 못하지만 정적 변수를 사용하거나이 포인터를 사용하여 각 개체의 고유 주소를 가져 와서 직접 만들 수 있습니다. – tweej