I’m working on a C++ Metro style app and have to pass a string by reference (somehow). At first, I passed the String^ which doesn’t work because strings are immutable how I have found out.
What would be a proper way to pass a string by reference?
Edit: OK, it seems that it’s not that easy since the answers and comments suggest to use return values. But as far as I think this is not applicable in my situation: In this Metro app I have two pages and a string should be “shared” across those two pages.
So in the main page I do this in a click event:
this->Frame->Navigate(newPage, this->TestString);
In the OnNavigatedTo event of the second page I convert the second parameter to a String^ and change it. Then I use this->Frame->GoBack() to navigate back to the first page. There I’d like to have access to the changed string. Unfortunately, GoBack() doesn’t allow to pass any parameters as far as I know.
You can use a tracking reference:
That would modify the original variable you passed in as parameter (see MSDN for more info and examples). It would then be used just as any other method taking a
String^parameter.But if possible, avoid using tracking references as parameters. I’d recommend just returning a
String^and assigning that to the original variable.Yet another possibility: You could just create some kind of View-agnostic DataModel that contains your String (and possibly other data that you work with). You could then pass that DataModel to your method. Since the DataModel variable isn’t changed (just a property of it), you wouldn’t need to pass a reference to it.