在Metro/C++中通过引用传递字符串?

Sen*_*pie 1 string c++-cli reference microsoft-metro

我正在开发一个C++ Metro风格的应用程序,必须通过引用传递一个字符串(不知何故).起初,我传递了String ^,它不起作用,因为字符串是不可变的我是如何找到的.

通过引用传递字符串的正确方法是什么?

编辑:好的,似乎这并不容易,因为答案和评论建议使用返回值.但据我认为这在我的情况下不适用:在这个Metro应用程序中,我有两个页面,并且这两个页面应该"共享"一个字符串.
所以在主页面中我在点击事件中这样做:
this->Frame->Navigate(newPage, this->TestString);

在第二页的OnNavigatedTo事件中,我将第二个参数转换为String ^并更改它.然后我用this->Frame->GoBack()它导航回第一页.在那里,我想访问更改的字符串.不幸的是,就我所知,GoBack()不允许传递任何参数.

Bot*_*000 5

您可以使用跟踪参考:

void ModifyTheParameter(String^% value) {
    value = gcnew String("Blah");
}
Run Code Online (Sandbox Code Playgroud)

这将修改您作为参数传入的原始变量(有关更多信息和示例,请参阅MSDN).然后它将被用作采用String^参数的任何其他方法.

但如果可能,请避免使用跟踪引用作为参数.我建议只返回一个String^并将其分配给原始变量.

还有另一种可能性:您可以创建某种与View无关的DataModel,其中包含您的String(以及您可能使用的其他数据).然后,您可以将该DataModel传递给您的方法.由于DataModel变量未更改(只是其属性),因此您无需传递对它的引用.