매개 변수의 typename 또는 일부 정보를 반환 할 매크로가 있습니까 (이상적으로 const char*
또는 실제로 cont char *const
)? C++의 소속 카테고리가 수행되지 않도록C (++) 형식 이름 함수/매크로
이 컴파일 시간에있다, 런타임 없습니다. 어쨌든 -fno-rtti
으로 실행됩니다.
매개 변수의 typename 또는 일부 정보를 반환 할 매크로가 있습니까 (이상적으로 const char*
또는 실제로 cont char *const
)? C++의 소속 카테고리가 수행되지 않도록C (++) 형식 이름 함수/매크로
이 컴파일 시간에있다, 런타임 없습니다. 어쨌든 -fno-rtti
으로 실행됩니다.
없습니다.
C++ 11에는 함수 정의 내에 __func__
식별자가있어 함수 이름과 함께 문자열 변수를 생성합니다. 대부분의 C++ 컴파일러에는 이것에 "데코 레이팅 된"함수 이름이있는 변형이 있습니다.
template<T>
void printT() {
cout << "T is of type"<<mysteryMacro(T);
}
그렇지 당신이 자동으로 대신 쓰기
cout<<mysteryMacro(std::string<wchar>);
의
기다려, 기다려, 뭐? – slaphappy
GCC 4.7은 최소한 꾸며지지 않은 함수 이름을 사용하므로 솔루션을 함께 해킹하는 데 사용할 수 없습니다. 동정. –
당신은 내가 볼 수있는 유일한 목적은 템플릿 내부 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>()
OP가'int x;를 원한다고 생각합니다. printf ("% s \ n", MYSTERYMACRO (x));''int'를 출력합니다. –
@KonradRudolph :'void f
@KonradRudolph : (죄송합니다. 편집 시간이되었습니다) 변수의 변수 유형을 얻으려면 자동으로 템플릿 매개 변수를 추론해야합니다. 'func (x)'와 함께 사용하십시오. 여기서 x는'int x;'로 정의됩니다. – ted
아니요, –
매크로 프로세서는 유형을 제외하고 C를 쓰는 것을 알지 못합니다. 또한 형식 이름에는 표준화 된 문자열 표현이 없습니다. –
토론이 포함 된 [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 제거 및 사라짐) –