2012-04-25 15 views
1

私はC++ Metroスタイルのアプリを開発しており、参照によって文字列を渡す必要があります。最初は文字列^を渡しましたが、これは文字列が不変であるために見つけられませんでした。Metro/C++での参照による文字列の受け渡しは?

参照によって文字列を渡す適切な方法は何でしょうか?

編集:OK、それは答えとコメントが戻り値を使用することを提案するので簡単ではないようです。しかし、これは私の状況には当てはまりません。このMetroアプリケーションでは、2ページあり、その2ページにわたって文字列を「共有」する必要があります。^2ページ目のOnNavigatedToイベントで this->Frame->Navigate(newPage, this->TestString);


は、私は文字列に2つ目のパラメータを変換し、それを変更:
だから、メインページに私がクリックイベントでこれを行います。次に、this->Frame->GoBack()を使用して最初のページに戻ります。そこで、変更された文字列にアクセスしたいと思います。残念ながら、GoBack()は私が知る限りではパラメータを渡すことはできません。

+1

実際には参照渡しを使用しないでください。返答値はBotzが答えたとおりに使用してください。 –

+0

私の質問を更新して私の状況を説明しました。私はそのような状況で戻り値をどのように使用するのか分かりません。 – Sentropie

答えて

5

あなたは、追跡参照使用することができます。

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

あなたはパラメータ(see MSDN for more info and examples)として渡された元の変数を変更します。それはString^パラメータをとる他の方法と同様に使用されます。

可能であれば、トラッキング参照をパラメータとして使用しないでください。 String^を返して、それを元の変数に割り当てることをお勧めします。

さらに別の可能性:あなたのString(およびあなたが扱う可能性のある他のデータも含む)を含む、View-Agnostic DataModelを作成できます。その後、そのDataModelをメソッドに渡すことができます。 DataModel変数は変更されていないため(単にそのプロパティ)、参照を渡す必要はありません。

+0

あなたの答えをありがとう。私は私の状況がいくつかの詳細で説明されるように私の質問を更新しました。あなたが示唆するように、私は追跡参照を避けるだろうが、私の状況で値を返す方法も見ていない。 – Sentropie

+0

@Sentropieわかりました。私は私の答えに別の可能性を加えました。 – Botz3000

1

std::stringへの参照をパラメータとして取る関数fの例を以下に示します。

std::string someString; 

void f(std::string& s); 

f(someString); 
+4

OPは* managed *タイプの 'System.String'について話しています。 –

関連する問題