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

时间:2012-04-25 09:41:22

标签: string reference c++-cli microsoft-metro

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

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

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

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

2 个答案:

答案 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);