1

我正在开发一个 C++ Metro 风格的应用程序,并且必须通过引用(以某种方式)传递一个字符串。起初,我传递了不起作用的 String^,因为我发现字符串是不可变的。

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

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

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

4

2 回答 2

5

您可以使用跟踪参考:

void ModifyTheParameter(String^% value) {
    value = gcnew String("Blah");
}

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

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

还有另一种可能性:您可以创建某种与视图无关的数据模型,其中包含您的字符串(可能还有您使用的其他数据)。然后,您可以将该 DataModel 传递给您的方法。由于 DataModel 变量没有改变(只是它的一个属性),因此您不需要传递对它的引用。

于 2012-04-25T10:01:21.400 回答
1

请参见下面的函数示例,该函数f将 a 的引用作为参数std::string

std::string someString;

void f(std::string& s);

f(someString);
于 2012-04-25T09:54:08.310 回答