[C++/CLI] Proprietati indexate implicite

Limbajul C++/CLI, applicatii mixed-mode sau probleme specifice .NET legate de C++ (forum moderat)
Post Reply
Viorel
Microsoft MVP
Microsoft MVP
Posts: 286
Joined: 13 Jul 2007, 12:26

[C++/CLI] Proprietati indexate implicite

Post by Viorel » 29 Dec 2008, 16:23

Proprietăţi indexate implicite cu număr variabil de parametri

O proprietate indexată implicită se defineşte cu ajutorul cuvîntului-cheie default:

Code: Select all

ref class C
{
public:
	property int default[int]
	{
		void set(int i, int value)
		{
			// Detalii de implementare
		}

		int get(int i)
		{
			// Detalii de implementare;
			// ca exemplu se returnează 0.
			return 0;
		}
	}
};
Un alt limbaj din familia .NET -- C# -- oferă suport pentru astfel de proprietăţi şi în cazul în care lista parametrilor are lungime variabilă. De exemplu:

Code: Select all

// Cod C#:
class C
{
	public int this[params int [] i]
	{
		set
		{
			// Detalii de implementare
		}

		get
		{
			// Detalii de implementare
			return 0;
		}
	}
}
Să examinăm acelaşi tip de proprietate în limbajul C++. O primă încercare ar fi:

Code: Select all

ref class C
{
public:
	property int default[... array<int> ^] // Eroare
	{
		void set(... array<int> ^, int value)
		{
			// Detalii de implementare
		}

		int get(... array<int> ^)
		{
			// Detalii de implementare;
			return 0;
		}
	}
};
Din păcate fragmentul nu este validat de compilator, care nici nu accepta „...” în linia property: „error C2143: syntax error : missing ']' before '...'”.

Doar următoarea variantă este acceptată:

Code: Select all

ref class C
{
public:
	property int default[array<int> ^]
	{
		int get(... array<int> ^ i)
		{
			// Detalii de implementare;
			return 0;
		}
	}
};
Deci funcţionează doar operaţia de citire get.

Prin urmare, implementarea unei proprietăţi indexate implicite avînd un număr variabil al parametrilor şi care să presupună ambele direcţii de acces, deocamdată este imposibilă.

Sursa: http://social.msdn.microsoft.com/Forums ... a6003d1a6/.


Next FAQ >>



Post Reply