目次
環境
Unreal Engine 4.17.2
Visual Studio Community 2015
FStringとstd::stringの変換について
プラグイン開発を行っているとネイティブのC/C++で書かれたプラグインとのやり取りが発生することがあると思います。
その時にUE4側のstring(FString)とC/C++のstring(std::string)の変換が必要になることがあります。
よくド忘れするので、簡単に個人用メモとしてまとめます。
FString -> std::string
この変換にはTCHAR_TO_UTF8マクロを使います。
FString ustr = "UnrealString"; std::string cstr = TCHAR_TO_UTF8(*ustr);
std::string -> FString
この変換にはc_strを呼び出します。
std::string cstr = "CppString"; FString ustr = cstr.c_str();
TCHAR_TO_UTF8の他にも幾つかマクロが存在します。
それらの定義は下記に記述があります。
Engine/Source/Runtime/Core/Public/Containers/StringConv.h
今回紹介したものがUTF8_TO_TCHARでしたが、他にも
TCHAR_TO_ANSI(str); ANSI_TO_TCHAR(str); TCHAR_TO_UTF8(str);
などがあります。
Blueprintに値を公開したい場合はFStringでなければなりません。
そのため、下記のようなものはエラーとなります。
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "String") std::string FooName; UFUNCTION(BlueprintCallable, Category = "String") void ConvertString(const std::string str); UFUNCTION(BlueprintCallable, Category = "String") std::string ConvertString();
UPROPERTYもUFUNCTIONもFStringに変換しなければ使用することはできません。
ですが、std::stringが引数、戻り値として使用できないというわけではないため
Unreal C++側での呼び出しに限定される場合は問題ありません。