2017-06-08 31 views
7

Muszę oznaczyć jako przestarzałą deklarację typu tablicowego (cóż, właściwie więcej niż jedną), aby pomóc w migracji naszego kodu do bardziej zaawansowanego i elastycznego rodzaju generycznego TArray<T>.Jak wycofać deklarację typu tablicy w Delphi?

Próbowałem to:

type 
    TArrayChars = array of Char deprecated; 

ale mam błąd kompilacji: E2029 ';' expected but identifier 'deprecated' found

Te same prace, jeżeli zadeklarowana typ nie jest tablicą, na przykład:

type 
    TFieldChars = set of Char deprecated; 

Należy pamiętać, że powinno to być wykonalne z założenia.

Czego mi brakuje?


To wydaje się być błąd w Delphi (co najmniej 10,1 Berlin i 10,2 Tokio).

Moja odpowiedź akceptowane proponuje schludny obejście, to jest:

type 
    TArrayCharsOld = array of Char; 
    TArrayChars = TArrayCharsOld deprecated; 

będę to zgłosić do Embarcadero.


Jest to kwestia Embarcadero QC mam składać: https://quality.embarcadero.com/browse/RSP-18316

+1

Powinieneś złożyć raport o błędzie. – Johan

+0

@William Nie, to nie jest duplikat tego pytania, tutaj mówię o deklarowaniu TYPE jako przestarzałego, coś, co powinno być możliwe, czytając dokumenty. Właściwości to inna historia, a nie wspomniana w dokumentach. – Bozzy

+0

@Bozzy, ale odpowiedź na połączone pytanie może zostać wykorzystane w przypadku Twojego problemu. – William

Odpowiedz

10

Istnieje sposób obejścia tego (przynajmniej w 10.1 Berlin).

type 
    TArrayCharsOld = array of Char; 
    TArrayChars = TArrayCharsOld deprecated; 

kompiluje.

+0

Tak, to też się uda, podstępne. Próbowałem tego, widziałem, jak się kompilował, ale nie wykonałem skoku, aby ustawić alias taki, że ten przestarzały typ był używany przez resztę kodu. Dobra robota. –

+0

Tak, działa! Właściwie otrzymuję ** dwa ** identyczne ostrzeżenia dla każdego użycia przestarzałego typu! Może to kolejny błąd? – Bozzy

+0

Tak, mam również dwa ostrzeżenia. – Dsm

5

Nie ma nic więcej do powiedzenia. Deklaracje dynamicznego typu nie mogą być oznaczone jako przestarzałe.

Uznalbym, że jest to wada. documentation mówi:

The 'hint' directives platform, deprecated, and library may be appended to any declaration. These directives will produce warnings at compile time. Hint directives can be applied to type declarations, variable declarations, class, interface, and structure declarations, field declarations within classes or records, procedure, function, and method declarations, and unit declarations.

dynamicznych deklaracja typu tablica spełnia wymagania wymienione tutaj, ponieważ jest to deklaracja typu.

+0

Jest to odpowiedź, której nigdy nie będzie się liczyć. Złożę raport o błędzie do Embarcadero. – Bozzy

+1

Niezależnie od obejścia problemu, nadal należy zgłosić raport o błędzie –

+1

Pewnie, że zrobię. Obejścia nie są rozwiązaniem. – Bozzy