[C++/CLI] Obtinerea metainformatiei despre tipul Nullable<T>

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] Obtinerea metainformatiei despre tipul Nullable<T>

Post by Viorel » 29 Dec 2008, 16:23

Obţinerea metainformaţiei despre tipul generic Nullable<T>

Dacă C este o clasă generică:

Code: Select all

generic< typename T >
ref class C
{
	// ...
};
atunci cu ajutorul cuîntului-cheie typeid poate fi extrasă informaţia despre acest tip. De exemplu, următorul fragment obţine lista tuturor membrilor:

Code: Select all

Type ^ t = C::typeid;
array< MemberInfo ^ > ^ m = t->GetMembers();
Tehnica funcţionează şi în cazul claselor de sistem, de exemplu:

Code: Select all

t = Collections::Generic::List::typeid;
m = t->GetMembers();
Să încercăm o altă clasa generică de sistem -- Nullable:

Code: Select all

t = Nullable::typeid;
m = t->GetMembers();
Însă dacă analizăm lista membrilor, nu vom găsi membrii caracteristici ai tipului generic Nullable -- HasValue şi Value. O cercetare mai atentă ne explică cauza: există o altă clasă, non-generică, avînd acelaşi nume Nullable. Anume aceasta este returnată de typeid. Cum obţinem informaţie despre varianta generică? Încercarea următoare eşuează nefiind corectă sintactic:

Code: Select all

t = Nullable<>::typeid; // eroare
(De fapt compilatorul se împiedică aici: „fatal error C1001: An internal error has occurred in the compiler”).

Prin urmare dacă un spaţiu de nume conţine doua clase avînd acelaşi nume, una fiind generică, atunci nu poate fi obţinută metainformaţia despre clasa generică.

Sursa: http://social.msdn.microsoft.com/Forums ... 7a6d6ca3f/.



Post Reply