我正在开发一个C ++ Metro风格的应用程序,并且必须通过引用传递一个字符串(不知何故)。起初,我传递了String ^,它不起作用,因为字符串是不可变的我是如何找到的。
通过引用传递字符串的正确方法是什么?
编辑:好的,似乎这并不容易,因为答案和评论建议使用返回值。但据我认为这在我的情况下不适用:在这个Metro应用程序中,我有两个页面,并且这两个页面应该“共享”字符串。
因此,在主页面中,我在点击事件中执行此操作:
this->Frame->Navigate(newPage, this->TestString);
在第二页的OnNavigatedTo事件中,我将第二个参数转换为String ^并进行更改。然后我使用this->Frame->GoBack()
导航回第一页。在那里,我想访问更改的字符串。不幸的是,就我所知,GoBack()不允许传递任何参数。
答案 0 :(得分:5)
您可以使用跟踪参考:
void ModifyTheParameter(String^% value) {
value = gcnew String("Blah");
}
这将修改您作为参数(see MSDN for more info and examples)传入的原始变量。然后它将被用作采用String^
参数的任何其他方法。
但如果可能,请避免使用跟踪引用作为参数。我建议只返回String^
并将其分配给原始变量。
另一种可能性:您可以创建某种与View无关的DataModel,其中包含您的String(以及您可能使用的其他数据)。然后,您可以将该DataModel传递给您的方法。由于DataModel变量未更改(只是其属性),因此您无需传递对它的引用。
答案 1 :(得分:1)
请参阅下面的函数f
示例,该函数将参数作为std::string
的引用。
std::string someString;
void f(std::string& s);
f(someString);