2016-12-31 2 views
0

C++ Je suis nouveau Unreal Engine, et je suis en train de déclarer une fonction inline comme suit:Inlining la macro UnrealEngine UE_LOG avec

void inline Print(const char* s) { 
    UE_LOG(LogTemp, Warning, TEXT("%s"), s); 
} 

Afin d'éviter l'appel à UE_LOG avec LogTemp et Warning à chaque fois. Lorsque vous appelez par exemple Print("Hello"), la sortie est LogTemp:Warning: 效汬o.

Ma conjecture est quelque chose lié à l'encodage ASCII, mais je ne suis pas vraiment sûr.

J'ai aussi essayé d'utiliser reinterpret_cast comme suit:

void inline Print(const char* s) { 
UE_LOG(LogTemp, Warning, TEXT("%s"), reinterpret_cast<const TCHAR *>(s)); 
} 

mais a fini avec les mêmes résultats. Je voudrais savoir la bonne façon de le faire (je ne voulais pas utiliser MACRO sur func en ligne), et s'il y a une explication simple à quelle est la raison de la sortie du charabia, ce sera aussi très utile.

Répondre

1

Vous ne pouvez pas donner const char*-UE_LOG, il faut const TCHAR*, aussi il ne peut pas être reinterpret_cast ed cette façon, il a besoin d'une conversion, mais il suffit de laisser FString poignées le sale boulot pour vous. Je pense que vous pouvez choisir une des options suivantes:

1.

inline void Print(const FString& s) 
{ 
    UE_LOG(LogTemp, Warning, TEXT("%s"), *s); 
} 

2.

inline void Print(const char* s) 
{ 
    FString str(s); 
    UE_LOG(LogTemp, Warning, TEXT("%s"), *str); 
}