-
Notifications
You must be signed in to change notification settings - Fork 338
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Returning CxxString
from Rust to C++
#1339
Comments
In case you're still trying to do this, I wanted to do something similar, but I don't think it's possible. What I ended up doing instead is used an out parameter. #[cxx::bridge(namespace = "rs")]
mod ffi {
extern "Rust" {
fn ask(response: Pin<&mut CxxString>);
}
}
pub fn ask(response: Pin<&mut CxxString>) {
response.push_str("Hi!!!");
} It would be nice to return stack-allocated C++ types, though. |
Thanks @zambony! That's a fine option when returning a single string, but it doesn't work well for strings inside classes/structs. |
I've also just encountered this issue. Are there any updates to do this properly instead of using out parameters? |
I managed to get around this by creating function on the C++ side for constructing new empty string and writing to it on the Rust side. Rust: fn str_test() -> UniquePtr<CxxString> {
let mut s = ffi::get_empty_string();
s.pin_mut().push_str("Hello from str_test");
s
} C++: #include <string>
#include <memory>
std::unique_ptr<std::string> get_empty_string() {
return std::make_unique<std::string>(std::string(""));
} But this should really be supported by the library. |
Thank you for the detailed example. So far I was exposing Rust to C++ but had nothing in the other direction yet. |
Is it possible to construct
CxxString
on the Rust side and return it to the C++ side?Returning
Pin<&mut CxxString>
doesn't work, because it's just a reference to local variable, which is destroyed at the end of the function:Returning
UniquePtr<CxxString>
doesn't work, because I'm not able to construct it:How can I do it? I want my generated bindings to use standard C++ structs such as
std::string
without needing the C++ users to deal withrust::String
which they might not know and might not work with other C++ libraries.The text was updated successfully, but these errors were encountered: