Cela va être une question vraiment maladroite mais est-il possible de faire ce qui suit en C++/CLI?Comment simuler une variable de suivi de référence de membre en C++/CLI?
// C++/CLI
public ref class Managed
{
public:
array<double>^ m_data;
Managed(array<double>^% data) : m_data(data)
{
}
void bar(int x)
{
System::Array::Resize(m_data, x);
}
};
// C#
static void Main(string[] args)
{
double [] d = new double[10];
Foo.Managed f = new Foo.Managed(d);
f.bar(5);
}
tel que, après f.bar appel (5) de Main, principal :: d et f.m_data sont le même tableau "réaffectés"? J'ai essayé avec des références non managées, des pointeurs, pin_ptr et ainsi de suite mais rien. Des idées? Si ce n'est pas possible, y a-t-il une raison? En utilisant l'opérateur de suivi de référence (%), je pourrais le faire si je devais redimensionner dans le constructeur, c'est ce qu'il m'a fait essayer.
Ceci est possible en C++ en utilisant les références, malheureusement, je ne sais pas comment lancer un tableau^à un tableau^& ni je peux utiliser le tableau ^% en tant que membre:
class Foo{
public:
double *& m_data;
Foo(double*& data): m_data(data)
{
}
void bar(int x)
{
delete m_data;
m_data = new double[x];
}
~Foo(){
delete [] m_data;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
double* data = new double[10];
Foo f(data);
std::cout << &data << "\n" << &f.m_data << "\n";
f.bar(5);
std::cout << &data << "\n" << &f.m_data;
getchar();
return 0;
}
Mais la référence que je passe est un tracker/ref. Comme, par exemple, devrais-je redimensionner le tableau dans le constructeur, le tableau dans main serait également modifié. – Anzurio
Mais le CLR ne prend pas en charge les membres du référentiel. (Je devrais mettre à jour ma réponse pour dire ceci plutôt que "les références sont passées par la valeur.") M_data est une vieille référence simple, pas une référence à une référence: la référence à une référence est seulement pertinente dans le fait de la transmettre dedans hors de la méthode du constructeur. – itowlson
J'ai mis à jour par la réponse pour rendre plus clair quand la référence devient une "copie indépendante". Désolé l'original était trompeur. – itowlson