2013-06-06 7 views
2

매개 변수의 typename 또는 일부 정보를 반환 할 매크로가 있습니까 (이상적으로 const char* 또는 실제로 cont char *const)? C++의 소속 카테고리가 수행되지 않도록C (++) 형식 이름 함수/매크로

컴파일 시간에있다, 런타임 없습니다. 어쨌든 -fno-rtti으로 실행됩니다.

+8

아니요, –

+0

매크로 프로세서는 유형을 제외하고 C를 쓰는 것을 알지 못합니다. 또한 형식 이름에는 표준화 된 문자열 표현이 없습니다. –

+0

토론이 포함 된 [this thread "유형의 문자열 표현]] (http://www.velocityreviews.com/forums/t742758-string-representation-of-a-type.html)을 계속 볼 수 있습니다 (Scott Meyers와 함께! ^^) 그리고 몇몇 링크 (특히 [Printtype'의이 구현체] (http://geometrica.saclay.inria.fr/team/Marc.Glisse/tmp/printtype.cpp)). (출처 : Scott Meyers의 기사 _ C++에서 const 제거 및 사라짐) –

답변

2

없습니다.

C++ 11에는 함수 정의 내에 __func__ 식별자가있어 함수 이름과 함께 문자열 변수를 생성합니다. 대부분의 C++ 컴파일러에는 이것에 "데코 레이팅 된"함수 이름이있는 변형이 있습니다.

template<T> 
void printT() { 
    cout << "T is of type"<<mysteryMacro(T); 
} 

그렇지 당신이 자동으로 대신 쓰기

cout<<mysteryMacro(std::string<wchar>); 

+1

기다려, 기다려, 뭐? – slaphappy

+0

GCC 4.7은 최소한 꾸며지지 않은 함수 이름을 사용하므로 솔루션을 함께 해킹하는 데 사용할 수 없습니다. 동정. –

-1

당신은 내가 볼 수있는 유일한 목적은 템플릿 내부 typeinformation를 얻는 것입니다

cout<<"std::string<wchar>"; 

, 예를 들면 쓸 수 코드를 알아라.

이것은 템플릿 전문화를 통해 얻을 수 있습니다.

면책 조항 : 이것은 테스트되지 않았으므로 작동해야하는 부분에 대한 힌트 일뿐입니다. 나는 이것을 좋은 해결책이라고 생각하지 않는다. 이 값을 인쇄하는 것보다는 문자열을 반환하는 것으로 변환 할 수 있다고 확신합니다. 이것을 위해 필요한 것을 조금 더 입력하면 좋을 것입니다.

template<T> 
void printT() { 
    code that generates compile error, so you see that you have an undefined type 
} 

template<> 
void printT<string>() { 
    cout << "you have a <string>"; 
} 

당신이 변수에 대한 템플릿을 사용하려는 경우 당신과 같이 자동 템플릿 매개 변수 공제에 의존 근래 것이다 :

template<> 
void printT<string>(T) { 
    cout << "you have a <string>"; 
} 

을이

int x; 
printT(x); 

에 있는데도처럼 사용 나는 왜 그런지 모르겠다. 왜냐하면 템플릿을 사용하지 않는 한 타입을 알게 될 것이고, 템플릿에서 타입이 템플릿 파라미터로 전달되어 knwon이 될 것이다. 문자열로) 항상 쓸 수 있습니다. printT<T>()

+1

OP가'int x;를 원한다고 생각합니다. printf ("% s \ n", MYSTERYMACRO (x));''int'를 출력합니다. –

+0

@KonradRudolph :'void f () {cout << "string"}'을 char * f (return "string";}'로 바꾸면됩니다. [솔루션] (http://geometrica.saclay.inria.fr/team/Marc.Glisse/tmp/printtype.cpp)에 좀 더 정교하지만이 개념을 사용합니다. 나는 사용자 gx_의 의견을 awnser로 취할 것입니다. – ted

+0

@KonradRudolph : (죄송합니다. 편집 시간이되었습니다) 변수의 변수 유형을 얻으려면 자동으로 템플릿 매개 변수를 추론해야합니다. 'func (x)'와 함께 사용하십시오. 여기서 x는'int x;'로 정의됩니다. – ted