Oto mój kod:Dlaczego kompilator C++/CLI tak łatwo miesza się z symbolami?
using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
namespace Tests {
ref class MyCollection : public IEnumerable<int> <----HERE!
kompilator C#, na przykład, będzie wiedział, że jedynym IEnumerable<T>
ma w tych nazw jest od System::Collections::Generic
. Dlaczego kompilator C++/CLI nie może zrobić tego samego? Jeśli nie piszę jego pełnej nazwy lub przynajmniej Generic::IEnumerable<int>
, nie rozpozna tego i wywoła błąd C2872: niejednoznaczny symbol.
Czy tu czegoś brakuje?
Grom, jeden jest ogólny, a drugi nie? Nie powinno być trudno wybrać, którego użyć, a ponadto kompilator C# nie jest przez to pomieszany. –
W jaki sposób kompilator wie * z góry *, że powinien wybrać wersję ogólną? Nie przeanalizował on jeszcze '', a nawet gdy to robi, najpierw musi ustalić, że '<' jest początkiem typu ogólnego, a nie operatorem 'less than'. I nadal musi poprawnie parsować C++, aby nie mogły dowolnie zmieniać sposobu analizowania kodu. –
jalf
Języki C# i C++ są różne i dlatego parsować kod na różne sposoby. – Mark